나는 다음과 같은 시나리오에서 무슨 일이 일어날 지 알아낼 수 없습니다 : 여기C++ 다중 상속
class MBase {
public:
MBase(int) {}
virtual char* vf() const = 0;
virtual ~MBase() {}
};
class D1 : public MBase { //NOT VIRTUAL!!!
public:
D1() : MBase(1) {}
char* vf() const { return "D1"; }
};
class D2 : virtual public MBase {
public:
D2() : MBase(2) {}
char* vf() const { return "D2"; }
};
class Bottom : public D1, public D2 {
public:
char* vf() const { return "Bottom"; }
}
Base* b = new Bottom();
D1과 D2 모두 MBase에서 실질적으로 상속 된 다이아몬드의 원래 정의에서
, 그러나 단 하나입니다. 우리는 여전히 Bottom 객체에 두 개의 개별 하위 객체가있을 것이므로 컴파일러는 사용할 하위 객체를 알지 못하므로 마지막 행이 컴파일되지 않습니까?
* 시도해 보셨습니까? –