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

class B{ 
    protected: 
    int var; 
}; 

class C : public A, public B {}; 

Cosa succede qui? La variabile si fonde? Posso chiamarne uno in specifico come, B :: var = 2, ecc.C++ Genitori multipli con lo stesso nome variabile

+2

Hai provato anche la sintassi che hai suggerito ('B :: var')? Succede essere corretto! –

risposta

10

La classe C avrà due variabili, B::var e A::var. Al di fuori di C si possono accedere in questo modo (se si cambia a public:),

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

Il tentativo di accesso c.var porterà ad un errore, dal momento che non v'è alcun campo con il nome var, solo A::var e B::var.

All'interno di C si comportano come normali campi, di nuovo, con i nomi A::var e B::var.

1

È possibile accedervi rispettivamente in classe C entro il A::var e B::var.

Here è un collegamento che copre lo stesso problema.

2

Se si fa riferimento solo alle var all'interno della C, il compilatore non sa se si intende A::var o B::var e il compilatore vi dirà che var è ambigua. Pertanto, è necessario qualificare il nome completamente quando si utilizza var.

Non si verifica alcuna fusione, qualsiasi istanza di C conterrà entrambe le variabili.