🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Vererbung

#1996
From: Dietmar Kuehl
Date: Thu, 04 Apr 1996 13:21
62 lines
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!kuehl
References: <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]