Thread View: de.comp.lang.c++
6 messages
6 total messages
Started by Volkmar Kostka
Wed, 03 Apr 1996 08:28
Vererbung
Author: Volkmar Kostka
Date: Wed, 03 Apr 1996 08:28
Date: Wed, 03 Apr 1996 08:28
27 lines
1061 bytes
1061 bytes
Da ihr euch beschwert, dass zuwenig C++ Fragen kommen, habe ich hier eine fuer euch ;-) : Was ist der Unterschied, wenn es ueberhaupt einen gibt, zwischen : class C : public A, B ... und class C : public B, A ... und aehnlichen Mehrfachvererbungen ? (Nein, ich habe keinen Standard zur Verfuegung) (Nein, ich habe auch kein proktisches Problem, diese Konstellation interessiert mich nur). Bye ... Volkmar | (small signature) | Volkmar Kostka (TPS GmbH - Germany) | | CHAOS PROGRAMMING | Volkmar.Kostka@tps.de | | HUMANOID | Phone: +49 9103 506 144 | | (original shrinked) | FAX: +49 9103 506 281 | LARGE SIGNATURE AVAILABLE ON REQUEST
Re: Vererbung
Author: Ralf Allar
Date: Thu, 04 Apr 1996 07:28
Date: Thu, 04 Apr 1996 07:28
32 lines
1412 bytes
1412 bytes
Volkmar Kostka wrote: > > Da ihr euch beschwert, dass zuwenig C++ Fragen kommen, habe ich hier eine fuer > euch ;-) : > > Was ist der Unterschied, wenn es ueberhaupt einen gibt, zwischen : > > class C : public A, B ... > > und > > class C : public B, A ... > > und aehnlichen Mehrfachvererbungen ? > Jou, da gibt es einen Unterschied, wenn er auch kaum auffaellt. Also, wenn ich mich nicht irre, dann kommen die Daten der Klasse A im ersten Beipiel direkt nach Klasse C's Daten und im zweiten Beispiel liegen die Daten von A hinter den Daten von B. (Das Ganze natuerlich im Speicher). Im Prinzip ist es aber das gleiche und sollte auch das gleiche sein. Aber fuer Leute, die gerne mit Zeigern die wildesten Sachen anstellen und casten was das Zeug haelt, ne interessante Sache, vielleicht. -- Dipl. Inform. Ralf Allar Wiechers & Partner Datentechnik GbmH E-mail: ralf.allar@wup.de Phone: ~49/214/76135
Re: Vererbung
Author: Enno Sandner
Date: Thu, 04 Apr 1996 08:53
Date: Thu, 04 Apr 1996 08:53
35 lines
1423 bytes
1423 bytes
Volkmar Kostka wrote:
>
> Da ihr euch beschwert, dass zuwenig C++ Fragen kommen, habe ich hier eine fuer
> euch ;-) :
>
> Was ist der Unterschied, wenn es ueberhaupt einen gibt, zwischen :
>
> class C : public A, B ...
>
> und
>
> class C : public B, A ...
>
> und aehnlichen Mehrfachvererbungen ?
>
> (Nein, ich habe keinen Standard zur Verfuegung)
> (Nein, ich habe auch kein proktisches Problem, diese Konstellation
> interessiert mich nur).
>
In ersten Bsp. wird 'A' public und 'B' private,
im zweiten 'B' public und 'A' private vererbt ;-).
Wenn man
class C : public A, public B { ... };
mit
class C : public B, public A { ... };
vergleicht, so beschraenken sich die Unterschiede auf die
o Aufrufreihenfolge der {Kon,De}struktoren der Basisklassen
o evtl. Anordnung der Member-Variablen.
Enno
Re: Vererbung
Author: Uwe Behrens
Date: Thu, 04 Apr 1996 10:44
Date: Thu, 04 Apr 1996 10:44
30 lines
1637 bytes
1637 bytes
In article <4jtcrc$ccg_001@news.tps.de>, Volkmar.Kostka@tps.de (Volkmar Kostka) writes:
|>
|> Da ihr euch beschwert, dass zuwenig C++ Fragen kommen, habe ich hier eine fuer
|> euch ;-) :
|>
|> Was ist der Unterschied, wenn es ueberhaupt einen gibt, zwischen :
|>
|> class C : public A, B ...
|>
|> und
|>
|> class C : public B, A ...
|>
|> und aehnlichen Mehrfachvererbungen ?
Es gibt keinen, jedenfalls keinen, der dich als Verwender der Sprache zu
interessieren braucht. Moeglicherweise gibt es einen im Speicherlayout von
``C'', aber das muss dich nicht kuemmern.
Allerdings: Ganz sicher bin ich nicht, was passiert, wenn ``B'' von ``A''
(virtuell) abgeleitet ist, oder umgekehrt. Aber wie ich Bjarne einschaetze
macht das keinen Unterschied. In ``Design and Evolution of C++'' weist
er mehrfach darauf hin, dass Fragen der Reihenfolge keinen Einfluss auf die
Semantik des Codes haben (sollen).
--
_______________________________________________________________________________
Uwe Behrens <behrens@acm.org> (aka <uwe@mevis.uni-bremen.de>)
``f u cn rd ths thn u cn prgrm n c''
Re: Vererbung
Author: 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
Re: Vererbung
Author: Guus Leeuw jr.
Date: Thu, 04 Apr 1996 19:28
Date: Thu, 04 Apr 1996 19:28
36 lines
1698 bytes
1698 bytes
Volkmar Kostka wrote:
>
> Da ihr euch beschwert, dass zuwenig C++ Fragen kommen, habe ich hier eine fuer
> euch ;-) :
>
> Was ist der Unterschied, wenn es ueberhaupt einen gibt, zwischen :
>
> class C : public A, B ...
Fall (i)
>
> und
>
> class C : public B, A ...
Fall(ii)
Der Unterschied ist folgendes:
(i) Klasse A ist hier eine public vererbte Basisklasse. B ist privat.
(ii) Klasse B ist hier eine public vererbte Basisklasse. A ist privat.
(i) und (ii) unterscheiden sich auch im Aufrufreihenfolge der Konstruktore und Destruktore
der Basisklassen.
Weitere (mehr spezifische) Information ist zu finden auf dem Web.
> (Nein, ich habe keinen Standard zur Verfuegung)
Du solltest :).
Die draft C++ standard ist in HTML Format auf den Web zu finden unter
http://info.desy.de/user/projects/C++.html
--
'l8r,
Guus
-------------------------------------------------------------------------------
They say I'm wild and I'm reckless.
-- Jim Steinman (from the song: Everything louder than everything else)
-------------------------------------------------------------------------------
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads