🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1298

Re: "this" und mehrfacher Vererbung

#1298
From: Wernke zur Borg x2049
Date: Tue, 16 Jan 1996 12:47
49 lines
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!wzb
References: <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]