Witam, oto zdjęcia istotnych tu stron z książki:
Nie zwracajcie uwagi na te wszystkie podkreślenia ;) ( nie licząc czerwonych )
No więc tak:
Jeśli klasa dziedziczy więcej niż jedną składową o tej samej nazwie, używanie tej nazwy bez kwalifikatora klasy powoduje wieloznaczność. W przypadku klas zawierających wirtualne klasy bazowe sytuacja może być wieloznaczna ale nie musi. Jeśli jedna nazwa zdominuje wszystkie pozostałe, można jej używać jednoznacznie bez kwalifikatora.
Pisze tu że: jeśli klasa dziedziczy więcej niż jedną składową o tej samej nazwie, używanie tej nazwy bez kwalifikatora klasy powoduje nie jednoznaczność i jeszcze że w przypadku klas zawierających klasy wirtualne gdy jedna nazwa zdominuje wszystkie pozostałe, można jej używać jednoznacznie bez kwalifikatora...
Przecież nie trzeba klas wirtualnych by używać nazwy składowej bez kwalifikatora, na przykład:
class A {
int a;
public:
A() : a(67) {}
int get(){
return a;
}
};
class B {
int b;
public:
B() : b(4) {}
int get(){
return b;
}
};
class C : public A, public B {
public:
int get(){
return A::get()+B::get();
}
};
int main(){
C c;
std::cout<<c.get()<<std::endl;
}
składowa get() klasy C zdominuje składową get() klas A i B. Mimo że nie ma tu żadnego dziedziczenia z użyciem słówka wirtual...
Wiem że to pewnie nie jest błąd w książce ale w moim zrozumieniu tego fragmentu. Będę wdzięczny za nakierowanie mnie na właściwy tok myślenia, z góry dziękuje i pozdrawiam :)