2012-04-02 13 views
1

Was die semantische Unterschied (n) zwischen den beiden folgenden:zwei verschiedene Arten von virtuellen Vererbung in C definieren ++

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

gegen

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

http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.9 – Mat

Antwort

2

Die erste zeigt an, dass Transmitter und Receiver teilen ein gemeinsames Storable Unterobjekt; so dass nur eins enthält.

Die zweite zeigt an, dass sie jeweils ihr eigenes Storable Unterobjekt haben werden; so dass zwei enthalten wird. (Die virtuelle Vererbung von Transmitter und Receiver macht keinen Unterschied zu Radio; es würde nur einen Unterschied machen für Klassen, die weiter davon erben).

+0

OK, wenn 'Klasse Storable {}; Klasse Sender: öffentlich speicherbar {}; Klasse Receiver: public Storable {}; 'wie definiert, wie' Radio' nur ein 'Storable' Unterobjekt zu machen? –

+1

@QiangLi: Machen Sie 'Sender' und' Empfänger' virtuell von 'Speicherbar', wie in Ihrem ersten Beispiel. Sie können es nicht tun, ohne ihre Definitionen zu ändern. –

+0

@QiangLi: Sie können nicht. Sie können die Definition einer Klasse nicht nachträglich ändern. Entweder ist es definiert zu teilen oder nicht. –

Verwandte Themen