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

dziedziczenie po klasach, które dziedziczą po tej samej klasie

Ostatnio zmodyfikowano 2018-01-05 00:24
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
dziedziczenie po klasach, które dziedziczą po tej samej klasie
» 2018-01-04 12:07:39
Witam, oto schemat:
Class a;
Class b : a;
Class c : a;
Class d : b,c;
Czy to możliwe? Nie można dziedziczyć dwa razy tej samej klasy, ale czy to ma tu znaczenie?
P-168400
Luq
» 2018-01-04 15:18:38
Klasa d będzie miała dwie kopie klasy a, jedną od b drugą od c. Czyli wszystkie pola klasy a będą występować podwójnie w obiekcie klasy d. No chyba, że przy dziedziczeniu b i c z a dodasz słowo virtual.
P-168403
YooSy
» 2018-01-04 20:24:59
Czyli wszystkie pola klasy a będą występować podwójnie w obiekcie klasy d.
ambiguous

Bez dziedziczenia virtual będzie ambiguous, bo kompilator nie będzie wiedział,
którą drogą dziedziczyć, bo obie będą poprawne.
P-168405
Luq
» 2018-01-04 21:20:13
Ale co ambiguous? Takie dziedziczenie jest możliwe i się skompiluje. Dalej możesz się odwoływać do pól wspólnej klasy, tylko musisz jednoznacznie określić, do której 'kopii' chcesz się odwołać. Nie jestem pewien czy o to ci chodziło.
C/C++
#include <iostream>

struct A {
    int x;
};

struct B
    : A
{
};

struct C
    : A
{
};

struct D
    : B
     , C
{
};

int main() {
    D obj;
   
    //obj.x = 0; - blad, odwolanie niejednoznaczne
    obj.B::x = 1;
    obj.C::x = 2;
   
    std::cout << obj.B::x << ' ' << obj.C::x << '\n';
}
P-168407
YooSy
» 2018-01-04 21:51:22
C/C++
//obj.x = 0; - blad, odwolanie niejednoznaczne
O to chodziło.

Zwykle tego typu dziedzicznie oznacza błąd projektowy.
Trudno utrzymać taki kod.
P-168408
latajacaryba
Temat założony przez niniejszego użytkownika
» 2018-01-05 00:24:39
Dziękuję, wszystko jest już jasne :)) zamykam
P-168409
« 1 »
  Strona 1 z 1