최종 파생 생성자에서 공유 기반을 명시
class SmartPhone : public Phone, public Camera { public:
SmartPhone() : Device("mobile"), Phone(), Camera() {} };
Phone과 Camera가 Device를 가상 상속해도, 실제 Device 초기화는 SmartPhone이 맡습니다.
virtual public으로 공유 기반 클래스를 하나만 만들면, 중간 클래스의 생성자 호출보다 최종 객체를 만드는 생성자가 더 중요한 책임을 갖습니다.
class SmartPhone : public Phone, public Camera { public:
SmartPhone() : Device("mobile"), Phone(), Camera() {} };
Phone과 Camera가 Device를 가상 상속해도, 실제 Device 초기화는 SmartPhone이 맡습니다.
SmartPhone ├─ Device // shared ├─ Phone └─ Camera
중복된 Device 상태가 없어지므로 name 같은 멤버 접근도 한 경로로 정리됩니다.
다이아몬드 문제를 해결한 뒤에도 초기화 인자가 흩어져 있으면 코드를 읽기 어렵습니다. 최종 파생 클래스가 공유 기반의 의미를 명확히 드러내야 합니다.