2012-09-03 12 views
8
class A{ 
    protected: 
    int var; 
}; 

class B{ 
    protected: 
    int var; 
}; 

class C : public A, public B {}; 

Was passiert hier? Wird die Variable zusammengeführt? Kann ich einen wie zB B :: var = 2 usw. anrufen?C++ Mehrere Eltern mit demselben Variablennamen

+2

Haben Sie sogar die von Ihnen vorgeschlagene Syntax ('B :: var') getestet? Es ist zufällig richtig! –

Antwort

10

Ihre Klasse C hat zwei Variablen, B::var und A::var. Außerhalb von C können Sie sie wie folgt zugreifen (wenn Sie public: ändern),

C c; 
c.A::var = 2; 

den Zugriff Versuch c.var zu einem Fehler führen wird, da kein Feld mit dem Namen var ist, nur A::var und B::var.

Innerhalb C verhalten sie sich wie normale Felder, wieder mit den Namen A::var und B::var.

1

Sie können auf sie in Klasse C durch A::var bzw. B::var zugreifen.

Here ist ein Link, der das gleiche Problem behandelt.

2

Wenn Sie nur var innerhalb von C verweisen, der Compiler nicht weiß, ob Sie A::var oder B::var bedeuten und der Compiler wird Ihnen sagen, dass var nicht eindeutig ist. Daher müssen Sie den Namen vollständig qualifizieren, wenn Sie var verwenden.

Es findet keine Zusammenführung statt, jede Instanz von C enthält beide Variablen.