C++ 다중 상속

다이아몬드 상속 정리

다이아몬드 상속은 같은 기반 클래스가 두 경로로 들어오면서 상태와 함수 호출이 모호해지는 구조입니다.

Base
Left
Right
Derived
01

중복 기반 확인

두 부모가 같은 기반 클래스를 상속하는지 먼저 구조를 그려 봅니다.

02

모호한 멤버 찾기

Derived에서 Base 멤버 접근이 어느 경로인지 애매해지는 지점을 확인합니다.

03

virtual 상속 적용

공유해야 하는 기반 클래스는 virtual public Base처럼 하나로 합칩니다.

04

초기화 순서 점검

가상 기반 클래스는 최종 파생 클래스가 초기화 책임을 갖는다는 점을 확인합니다.

설계 기준

  • 다중 상속이 데이터 중복을 만든다면 조합으로 바꿀 수 있는지 먼저 봅니다.
  • 인터페이스 역할만 하는 기반 클래스는 상태를 두지 않는 편이 안전합니다.
  • 가상 상속은 문제 해결책이지만 생성자 규칙이 복잡해진다는 비용이 있습니다.

키워드

virtual기반 공유
scope모호성 지정
composition대안 설계