Nagie's DevStory
[CPP] 33. 다중 상속 (Multiple inheritance) 본문
728x90
다중 상속은 클래스가 두 개 이상의 부모 클래스에서 특성( 데이터 멤버, 멤버 함수)을 상속할 수 있게 한다.
이에 따라 파생 클래스는 여러 부모 클래스의 데이터 멤버와 멤버 함수를 모두 가질 수 있으며
서로 관련 있는 클래스에서 특성을 상속 하거나 클래스 계층 구조에서 여러 부모 클래스로 부터 상속받아
새로운 클래스를 만들 때 또는 다형성을 활용하여 다양한 부모 클래스에서 파생한 객체를 다룰 때 사용한다.
다만 주의할 점이 있는데 다중 상속을 사용할 때는 상속 충돌 문제가 발생할 수 있다.
이걸 죽음의 다이아몬드 문제라고 부르며 하나의 클래스가 둘 이상의 경로를 통해 같은 기본 클래스를 상속할 때 발생한다.
C++에서는 가상 상속(virtual inheritance)을 사용해 이 문제를 해결하지만
코드의 가독성과 유지 보수를 어렵게 만드니 되도록 사용하지 않는 게 좋다.
class A {
public:
void funcA() {
// ...
}
};
class B {
public:
void funcB() {
// ...
}
};
class C : public virtual A, public virtual B { //가상 상속
public:
void funcC() {
// ...
}
};
int main() {
C obj;
obj.funcA(); // A 클래스에서 상속한 함수
obj.funcB(); // B 클래스에서 상속한 함수
obj.funcC(); // C 클래스의 함수
}
자세한 이야기는 아래의 링크를 참고해 읽어보면 좋다.
728x90
Comments