Article View: de.comp.lang.c++
Article #1996Re: Vererbung
From: Dietmar Kuehl
Date: Thu, 04 Apr 1996 13:21
Date: Thu, 04 Apr 1996 13:21
62 lines
2804 bytes
2804 bytes
Hi,
Volkmar Kostka (Volkmar.Kostka@tps.de) wrote:
: Da ihr euch beschwert, dass zuwenig C++ Fragen kommen, habe ich hier eine fuer
: euch ;-) :
Dann werde ich ja wohl antworten muessen... Ist allerdings kein Problem :-)
: Was ist der Unterschied, wenn es ueberhaupt einen gibt, zwischen :
: class C : public A, B ...
Ich vermute Du meinst den Unterschied zwischen
class C: public A, public B ...
: und
: class C : public B, A ...
... und
class C: public B, public A ...
Andernfalls ist der Unterschied einfach der, dass man im ersten Fall
auf den 'A' Teil von C zugreifen kann, auf den 'B' Teil aber nicht. Im
zweiten Fall ist es genau umgekehrt. Die zusaetzlichen Regeln, die ich
unten erwaehne, gelten ausserdem.
: und aehnlichen Mehrfachvererbungen ?
Ansonsten gibte es fast keinen Unterschied: Fuer den Benutzer der
Klasse macht es keinen Unterschied, in welcher Reihenfolge die
Basisklassen aufgelistet werden, d.h. man definiert dadurch keine
unterschiedliche Semantik. Lediglich fuer denjenigen, der 'C'
implementiert macht es einen Unterschied: Im ersten Fall wird das 'A'
Subobjekt vor dem 'B' Subobjekt konstruiert, im zweiten Fall genau
umgekehrt. Das ist gelegentlich wichtig, wenn man die Objekte in der
Member-Initializer-Liste bereits verwendet werden:
class A { public: /*...*/ int some_value() const; };
class B { public: B(int); /*...*/ };
class C: public A, public B { /*...*/ C(); /*...*/ };
class D: public B, public A { /*...*/ C(); /*...*/ };
C::C():
A(), // explizit aufgelisted: wird immer vor B konstruiert
B(some_value()) // A ist bereits initialisiert -> geht
{ /*...*/ }
D::D():
B(some_value()), // A wird immer erst nach 'B' initialisiert -> Fehler
A() // some_value() lieferte moeglicherweise etwas falsches
{ /*...*/ }
Analog werden die Destruktoren in umgekehrter Reihenfolge aufgerufen.
Allerdings bin ich der Meinung, dass man derartige Abhaengigkeiten nach
Moeglichkeit vermeiden sollte....
: (Nein, ich habe keinen Standard zur Verfuegung)
Niemand hat einen C++ Standard: Der ANSI/ISO C++ Standard wird fuer
1998 anvisiert...
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl/
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID:
<4k0ic6$qb5@news.BelWue.DE>Path:
arc1-ca.pugleaf.net!news.belwue.de!horn!kuehlReferences:
<4jtcrc$ccg_001@news.tps.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!horn!kuehl From: kuehl@horn.informatik.uni-konstanz.de (Dietmar Kuehl) Newsgroups: de.comp.lang.c++ Subject: Re: Vererbung Date: 4 Apr 1996 13:21:10 GMT Organization: Fakultät für Mathematik und Informatik Message-ID: <4k0ic6$qb5@news.BelWue.DE> References: <4jtcrc$ccg_001@news.tps.de> Reply-To: dietmar.kuehl@uni-konstanz.de NNTP-Posting-Host: horn.informatik.uni-konstanz.de X-Newsreader: TIN [version 1.2 PL2]