[c++] 구조체와 클래스의 가상 상속
가상 상속은 C++에서 다중 상속 시 발생하는 다이아몬드 문제(다이아몬드 상속 문제)를 해결하기 위한 기법입니다. C++에서는 구조체와 클래스 간에도 가상 상속을 허용합니다.
구조체(struct)와 클래스(class)
C++에서 구조체와 클래스의 차이는 기본적으로 접근 지정자의 기본값이 다르다는 것입니다. 클래스는 기본적으로 private으로, 구조체는 기본적으로 public으로 지정됩니다.
struct Person {
string name;
int age;
};
class Student {
string name;
int age;
public:
void display();
};
가상 상속
가상 상속은 다중 상속 시 발생하는 다이아몬드 문제를 해결하는 기법 중 하나입니다. 가상 상속을 사용하면 가상 기본 클래스의 서브클래스가 가상 상속되는 클래스들로부터 가상 상속 받을 수 있습니다.
가상 상속을 적용하기 위해서는 가상 상속 지정자를 사용합니다.
class A {
...
};
class B : virtual public A {
...
};
class C : virtual public A {
...
};
class D : public B, public C {
...
};
위의 예시에서 class B
와 class C
에 가상 상속 지정자를 설정하여 class D
에서 class A
를 가상 상속받을 수 있도록 합니다.
결론
C++에서 구조체와 클래스 사이의 가상 상속은 다중 상속 시 발생할 수 있는 문제를 방지할 수 있는 중요한 기법입니다. 다중 상속을 사용할 때는 가상 상속에 대해 신중하게 고려해야 합니다.
References
- https://en.cppreference.com/w/cpp/language/inheritance
- https://www.geeksforgeeks.org/virtual-inheritance-in-cpp/