在C ++中定义虚拟继承的两种不同方法

时间:2012-04-02 19:19:23

标签: c++

以下两者之间的语义差异是什么:

class Storable{};
class Transmitter: public virtual Storable{};
class Receiver: public virtual Storable{};
class Radio: public Transmitter, public Receiver{};

VS

class Storable{};
class Transmitter: public Storable{};
class Receiver: public Storable{};
class Radio: public virtual Transmitter, public virtual Receiver{};

1 个答案:

答案 0 :(得分:2)

第一个表示TransmitterReceiver将共享一个共同的Storable子对象;这样Radio只会包含一个。

第二个表明他们每个都有自己的Storable子对象;这样Radio将包含两个。 (TransmitterReceiver的虚拟继承对Radio没有任何影响;它只会对继承它的类产生影响。)