Base 중복 확인
비가상 상속이면 Derived 안에 Left::Base와 Right::Base가 각각 생깁니다.
다이아몬드 상속은 Base가 Left와 Right를 거쳐 Derived에 두 번 들어오는 구조입니다. virtual 상속을 쓰지 않으면 Base 부분 객체와 멤버 접근이 중복됩니다.
비가상 상속이면 Derived 안에 Left::Base와 Right::Base가 각각 생깁니다.
Derived*를 Base*로 바꾸거나 Base::member에 접근할 때 경로가 둘이면 컴파일 오류가 납니다.
Left와 Right가 virtual public Base로 상속하면 Derived가 Base 부분 객체 하나를 공유합니다.
가상 기반 클래스는 가장 아래의 most-derived 생성자가 Base(args)를 직접 초기화합니다.