Article View: de.comp.lang.c++
Article #1298Re: "this" und mehrfacher Vererbung
From: Wernke zur Borg x2049
Date: Tue, 16 Jan 1996 12:47
Date: Tue, 16 Jan 1996 12:47
49 lines
2444 bytes
2444 bytes
Olaf Krzikalla (ok4@irz.inf.tu-dresden.de) wrote:
> Hi Leute,
> ich hab ein Problem mit mehrfacher Vererbung:
> class A : B,C;
> Dabei sind sowohl B als auch C von einer Listenklasse abgeleitet, A ist also in
> zwei Listen eingetragen. Das Linken und Unlinken in den Listen geschieht u.a.
> ueber die Verwendung von "this". Das macht aber Probleme, da beim Aufruf this
> nicht unbedingt auf das abgeleitete Objekt zeigt. Das ist ja eigentlich auch
> logisch, da die Funktionen der Basisklasse ja einen Zeiger auf ihre
> Datenstruktur erwartet und dieser implizite Zeiger gleich als explizites this
> mitverwendet wird.
Es ist nicht ganz klar, was du meinst. Die Basisklasse sieht
natuerlich "ihre Datenstruktur" unter dem this-Zeiger. Das allein kann
noch nicht zu Problemen fuehren. Problematisch wird's, wenn B und C
von derselben Klasse D abgeleitet sind, und du damit eine "diamond
shape"-Vererbung hast. Damit sind die Daten-Member der Klasse D
mehrfach in A vorhanden, und du bekommst Mehrdeutigkeiten beim Zugriff
auf diese Member. In diesem Fall hilft die Deklaration von D als
virtuelle Basisklasse von B und C:
class B : virtual public D {...};
class C : virtual public D {...};
class A : public B, public C {...};
was dazu fuehrt, dass die Daten von D nur einmal in A vorhanden sind
und damit auch keine Mehrdeutigkeiten mehr existieren.
In jedem Konstruktor der Klasse A musst du dann alle Baseclass-
Konstruktoren aufrufen, falls sie keinen Default-Konstruktor
haben:
A::A(...) : B(...), C(...), D(...) {...}
Weitere Restriktionen bzgl. virtueller Basisklassen kannst du in jedem
C++ Lehrbuch nachlesen.
> ...
Hope that helps.
______________________________________________________________________
Wernke zur Borg Tel: +49-6151-90-2049
Cray Systems GmbH Fax: +49-6151-90-3414
c/o ESOC/European Space Operations Centre email: wzb@esoc.esa.de
D-64293 Darmstadt/Germany
Technical Details
Message-ID:
<4dg6pp$hku@info.estec.esa.nl>Path:
arc1-ca.pugleaf.net!esa.nl!sce85!wzbReferences:
<4ddamk$etb@irz305.inf.tu-dresden.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!esa.nl!sce85!wzb From: wzb@sce85 (Wernke zur Borg x2049) Newsgroups: de.comp.lang.c++ Subject: Re: "this" und mehrfacher Vererbung Date: 16 Jan 1996 12:47:53 GMT Organization: European Space Agency Distribution: world Message-ID: <4dg6pp$hku@info.estec.esa.nl> References: <4ddamk$etb@irz305.inf.tu-dresden.de> NNTP-Posting-Host: sce85.sced.esoc.esa.de X-Newsreader: TIN [version 1.2 PL2]