[c++] 다중 상속에서의 가상 상속
가상 상속은 C++에서 클래스 간의 다이아몬드 상속 문제를 해결하기 위해 사용됩니다. 다이아몬드 상속 문제는 두 개 이상의 클래스가 동일한 기본 클래스를 가지고 있고, 파생 클래스가 상위 클래스의 멤버에 대한 액세스 권한을 여러 번 갖게 되는 문제를 의미합니다. 이 문제를 해결하기 위해 가상 상속 키워드를 사용하여 각 기본 클래스가 중복으로 상속되지 않도록 합니다.
가상 상속은 기본 클래스 앞에 virtual
키워드를 사용하여 선언됩니다. 예를 들어,
class A {
public:
int a;
};
class B : virtual public A {
public:
int b;
};
class C : virtual public A {
public:
int c;
};
class D : public B, public C {
public:
int d;
};
위의 예시에서 class D
는 class B
와 class C
로부터 class A
를 각각 상속하고 있습니다. 이때 virtual
키워드를 사용하여 가상 상속을 선언하면 class D
에서 class A
의 멤버에 대한 중복이 발생하지 않으며, 다이아몬드 문제가 발생하지 않습니다.
가상 상속은 다이아몬드 상속 문제를 해결하는 유용한 도구이지만, 사용 시에는 다중 상속 자체를 유의하여야 합니다. 올바르게 사용하지 않으면 가독성과 유지보수가 어려워질 수 있습니다.