Language/C++
[C++] 21.Unmanaged Programming: 다중 상속
coco_daddy
2024. 1. 30. 14:33
다중 상속
다중 상속은 사용하지 않는 것이 일반적이다.
생성자 호출 순서
- 파생 클래스에서 등장한 부모 클래스 순서대로 호출된다.
- 초기화 리스트의 순서는 상관 없다.
→ super()
를 사용할 수 없는 이유는 다중 상속이 가능하기 때문입니다.
문제점1: 같은 이름의 함수
- 같은 이름의 함수가 있다면 호출될 함수를 명시적으로 지정해야 한다.
> 어떤 함수를 호출해야하는지 모호하다면 컴파일이 안 되기 때문에 부모클래스를 특정해주어야 한다.
문제점2: 다이아몬드 문제
- Liger는 몇 개의 2개의 Animal 클래스를 동시에 가지게 되는 문제가 발생.
- 다이아몬드 문제(Diamond Problem): 다중 상속을 사용할 때, 한 클래스가 두 개 이상의 클래스를 상속하고 그 두 클래스가 다시 같은 클래스를 상속하는 상황에서 발생하는 문제.
- Liger는 몇 개의 Animal이 있는지 모호하다.
- 둘 중 어떤 함수를 가리켜야 하는지도 모호하다.
→ 가상 베이스 클래스(Virtual Base Class)를 사용하여 문제를 해결할 수 있다.
가상 베이스 클래스
→ 하지만 모든 클래스가 자신이 다중 상속을 받을 것이라는 것을 가정하고 가상 베이스 클래스로 작성하는 것은 매우 비효율적이다.
→ 다중 상속 대신 인터페이스를 활용하는 것이 좋다.