Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] Dziedziczenie wirtualne a odwoływanie się do danych składowych.

Ostatnio zmodyfikowano 2016-05-15 02:06
Autor Wiadomość
Valhalla
Temat założony przez niniejszego użytkownika
[c++] Dziedziczenie wirtualne a odwoływanie się do danych składowych.
» 2016-05-14 20:52:52
Witam serdecznie.
Zastanawiam się nad jedną rzeczą, mamy klasę Q w której jest dana składowa 'x'.
C/C++
class Q {
public:
    int x;
};
A także dwie klasy, które dziedziczą klasę Q w sposób wirtualny:
C/C++
class A
    : virtual public Q
{ };
class B
    : virtual public Q
{ };
Klasa C dziedziczy klasy A i B oraz klasę Q w sposób zwykły:
C/C++
class C
    : public A
     , public B
     , public Q
{
public:
    void f() {
        cout << A::x; // albo B::x (odwołanie do tego samego pola)
    }
};
Moje pytanie jest takie: jak odwołać się do tej danej składowej x klasy bezpośrednio podstawowej dla klasy C. Zapis C::Q::x jest uznawany za wieloznaczność.
Jedyne co odkryłem to to że jeśli mamy dodatkową klasę np:
C/C++
class WW
    : public Q
{ };
i klasa C zamiast klasy Q dziedziczy w sposób normalny klasę WW to odwołanie się do WW::x jest możliwe, czy idzie i jaki ewentualnie zapis jest w poprzednim przypadku? Pozdrawiam
P-148213
pekfos
» 2016-05-14 22:20:21
Klasa WW jest niezbędna dla rozwiązania wieloznaczności przy dostępie do Q. W GCC jest nawet na taki przypadek ostrzeżenie:
warning: direct base 'Q' inaccessible in 'C' due to ambiguity
P-148222
Valhalla
Temat założony przez niniejszego użytkownika
» 2016-05-15 02:06:37
OK, dzięki za odpowiedź :)
Temat chyba można zamknąć. Dowiedziałem się wszystkiego co chciałem =)
P-148242
« 1 »
  Strona 1 z 1