Dziedziczenie wirtualne po niezmienialnych klasach

0

Mam sobie strukturę klas:

class A{};
class B:public A{};
class C:public A{};

Chcę stworzyć klasę D, która będzie miała właściwości zarówno B jak i C:

class D:public B,public C{};

Umówmy się, że A, B i C są klasami bibliotecznymi i nie mogę ich zmienić. Oczywiście teraz będzie błąd kompilacji "ambigous base". Dodanie virtual w dziedziczeniu nic nie zmieni, bo B i C już dziedziczą niewirtualnie po A.

Jak obejść ten błąd?

0

Nie da się. Użyj kompozycji.

2
veol napisał(a):

Oczywiście teraz będzie błąd kompilacji "ambigous base"
Czyżby? Błąd się pojawi dopiero wtedy, kiedy będziesz chciał się odwołać do klasy A nie wskazując o które A chodzi (czy o bazę B czy o bazę C). Jeśli wskażesz odpowiednie A błędu nie będzie .

1 użytkowników online, w tym zalogowanych: 0, gości: 1