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

class B{ 
    protected: 
    int var; 
}; 

class C : public A, public B {}; 

Co się tutaj dzieje? Czy zmienna łączy się? Czy mogę połączyć się z konkretnym, B :: var = 2, itp.C++ Wielu rodziców o tej samej nazwie zmiennej

+2

Czy próbowałeś nawet zaproponowanej składni ('B :: var')? Zdarza się, że jest poprawne! –

Odpowiedz

10

Twoja klasa C będzie miała dwie zmienne, B::var i A::var. Poza C można uzyskać do nich dostęp tak (jeśli zmieni się public:)

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

Próba dostępu c.var doprowadzi do błędu, ponieważ nie ma pola z nazwą var tylko A::var i B::var.

Wewnątrz C zachowują się jak zwykłe pola, ponownie o nazwach A::var i B::var.

1

Możesz uzyskać do nich dostęp w klasie C, odpowiednio: A::var i B::var.

Here to link, który obejmuje ten sam problem.

2

Jeśli odnoszą się tylko do var wewnątrz C, kompilator nie wie, czy to znaczy A::var lub B::var i kompilator powie, że var jest niejednoznaczna. Dlatego musisz całkowicie zakwalifikować nazwę podczas korzystania z var.

Nie ma połączenia, każde wystąpienie C będzie zawierało obie zmienne.

Powiązane problemy