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