Language/C++

[C++] 21.Unmanaged Programming: 다중 상속

coco_daddy 2024. 1. 30. 14:33

다중 상속

다중 상속은 사용하지 않는 것이 일반적이다.

생성자 호출 순서

  • 파생 클래스에서 등장한 부모 클래스 순서대로 호출된다.
  • 초기화 리스트의 순서는 상관 없다.

super()를 사용할 수 없는 이유는 다중 상속이 가능하기 때문입니다.

문제점1: 같은 이름의 함수

  • 같은 이름의 함수가 있다면 호출될 함수를 명시적으로 지정해야 한다.
    > 어떤 함수를 호출해야하는지 모호하다면 컴파일이 안 되기 때문에 부모클래스를 특정해주어야 한다.

문제점2: 다이아몬드 문제

Lion과 Tiger를 상속 받는 Liger 클래스

  • Liger는 몇 개의 2개의 Animal 클래스를 동시에 가지게 되는 문제가 발생.
  • 다이아몬드 문제(Diamond Problem): 다중 상속을 사용할 때, 한 클래스가 두 개 이상의 클래스를 상속하고 그 두 클래스가 다시 같은 클래스를 상속하는 상황에서 발생하는 문제.
    • Liger는 몇 개의 Animal이 있는지 모호하다.
    • 둘 중 어떤 함수를 가리켜야 하는지도 모호하다.

가상 베이스 클래스(Virtual Base Class)를 사용하여 문제를 해결할 수 있다.

가상 베이스 클래스

→ 하지만 모든 클래스가 자신이 다중 상속을 받을 것이라는 것을 가정하고 가상 베이스 클래스로 작성하는 것은 매우 비효율적이다.

→ 다중 상속 대신 인터페이스를 활용하는 것이 좋다.