dziedziczenie po klasach, które dziedziczą po tej samej klasie
Ostatnio zmodyfikowano 2018-01-05 00:24
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? |
|
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. |
|
YooSy |
» 2018-01-04 20:24:59 Czyli wszystkie pola klasy a będą występować podwójnie w obiekcie klasy d. | ambiguousBez dziedziczenia virtual będzie ambiguous, bo kompilator nie będzie wiedział, którą drogą dziedziczyć, bo obie będą poprawne. |
|
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. #include <iostream>
struct A { int x; };
struct B : A { };
struct C : A { };
struct D : B , C { };
int main() { D obj; obj.B::x = 1; obj.C::x = 2; std::cout << obj.B::x << ' ' << obj.C::x << '\n'; }
|
|
YooSy |
» 2018-01-04 21:51:22 O to chodziło. Zwykle tego typu dziedzicznie oznacza błąd projektowy. Trudno utrzymać taki kod. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2018-01-05 00:24:39 Dziękuję, wszystko jest już jasne :)) zamykam |
|
« 1 » |