0
在普通鑽石的情景:多重繼承 - 虛擬修飾符
class MBase {
public:
MBase(int) {}
virtual char const* vf() const = 0;
virtual ~MBase() {}
};
class D1 : public MBase { //NOT VIRTUAL!!!
public:
D1() : MBase(1) {}
char const* vf() const { return "D1"; }
};
class D2 : virtual public MBase {
public:
D2() : MBase(2) {}
char const* vf() const { return "D2"; }
};
class Bottom : public D1, public D2 {
public:
char const* vf() const { return "Bottom"; }
}
如果我修改底部繼承修飾符是虛擬的兩個D1和D2什麼會改變?我的意思是,這會產生什麼影響:
class Bottom : public virtual D1, public virtual D2 {
public:
char const* vf() const { return "Bottom"; }
}
好的,所以我猜如果我有幾個底部,都是從D1和D2實際繼承的,那麼葉子在它們中只有D1和D2的一個副本......非常感謝您的完美答案! – Bober02 2012-04-15 10:07:37