본문 바로가기
스터디/C++

[ C++ ] 다중상속( Multiple Inheritance )과 가상상속( Virtual Inheritance )

by 알 수 없는 사용자 2019. 10. 10.

C++은 클래스 다중 상속을 지원하는 객체지향 언어인데,

둘 이상의 클래스를 동시에 상속하는 것을 다중 상속( Multiple Inheritance )이라고 한다.

 

다중 상속의 예제를 보자.

 

여기서 보면 문제점이 없어 보인다.

 

근데 만약에 클래스 A와 B에 동일한 이름의 멤버가 존재하면 어떻게 될까?

 

그럼 컴파일러가 어느 클래스의 멤버에 접근할지 몰라서 모호하다면서 화를 낸다..;;

 

그래서 호출하는 멤버 함수 앞에 기초 클래스 이름을 적어주면 해결된다.

 

이뿐만 아니라 더 큰 문제점이 있다.

 

아래의 예제를 보자.

 

위에서 보이듯이 D 클래스가 A 클래스를 두 번 상속을 받게 된다.

 

클래스간의 상속 관계

이러한 상황에서 A 클래스를 딱 한 번만 상속하게 하는 방법이 가상 상속( Virtual Inheritance )이다.

 

B 클래스와 C 클래스가 A 클래스를 상속받을 때 virtual 선언을 하면 된다.

그럼 B와 C 클래스를 상속받는 D 클래스는 A클래스를 한번 상속받게 된다.

 

A 출력이 하나로 줄어든 것을 확인할 수 있다.