Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.iso-c++ > #2157
| From | Stefan Reuther <stefan.news@arcor.de> |
|---|---|
| Newsgroups | de.comp.lang.iso-c++ |
| Subject | Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden |
| Date | 2022-09-10 09:03 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <tfhjt8.174.1@stefan.msgid.phost.de> (permalink) |
| References | <tfdr4a$123lk$1@tota-refugium.de> <tffu7g.4vc.1@stefan.msgid.phost.de> <tfg8nn$1255r$1@tota-refugium.de> |
Am 09.09.2022 um 22:46 schrieb Michael Landenberger:
> "Stefan Reuther" schrieb am 09.09.2022 um 17:47:27:
>> Am 09.09.2022 um 00:42 schrieb Michael Landenberger:
>>> Wie kann ich es erreichen, dass beim Aufruf des
>>> Konstruktors von CBase über den Konstruktor eines Objekts der Klasse
>>> CDerived *nicht* CBase::getName(), sondern CDerived::getName()
>>> aufgerufen wird?
>
>> Gar nicht, da das CBase-Objekt zu dem Zeitpunkt noch nicht weiß, dass es
>> mal ein CDerived werden wird.
>
> Wie schafft das dann Delphi?
Delphi funktioniert halt anders.
In C++ setzt typischerweise der Konstruktor den vtbl-Pointer, und der
weiß natürlich nur von sich selbst ("ich bin ein CBase, also setze ich
den vtbl-Pointer für CBase").
Zumindest in Turbo Pascal, dem Urahn von Delphi, hat das nicht der
Konstruktor gemacht, sondern der, der den Konstruktor aufruft. Der weiß
natürlich auch schon, was das am Ende mal werden soll. Auch hat Turbo
Pascal nicht erzwungen, dass man irgendwo den Basisklassenkonstruktor
aufruft, wohingegen das in C++ erzwungenermaßen das Allererste ist, was
der abgeleitete Konstruktor tun muss.
Allerdings gibt es in Turbo Pascal (und m.W. in Delphi) auch keine
Mehrfachvererbung.
Du kannst das Delphi'sche
p := New(PDings, Init(foo, bar));
natürlich auch in C++ nachbauen als
p = new CDings(); // leeres Objekt mit korrektem vtbl-Zeiger
p->init(foo, bar); // Pseudo-Konstruktor
aber das ist zumindest in den meisten Coding-Styles kein idiomatisches C++.
Stefan
Back to de.comp.lang.iso-c++ | Previous | Next — Previous in thread | Next in thread | Find similar
Eigenartiges Verhalten von überschriebenen virtuellen Methoden "Michael Landenberger" <spamwirdgefiltert@web.de> - 2022-09-09 00:42 +0200
Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden Stefan Reuther <stefan.news@arcor.de> - 2022-09-09 17:47 +0200
Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden "Michael Landenberger" <spamwirdgefiltert@web.de> - 2022-09-09 22:46 +0200
Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden paule32 <paule32.jk@gmail.com> - 2022-09-10 09:09 +0200
Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden Stefan Reuther <stefan.news@arcor.de> - 2022-09-10 09:03 +0200
Re: Eigenartiges Verhalten von überschriebenen virtuellen Methoden Markus Schaaf <mschaaf@elaboris.de> - 2022-09-10 13:08 +0200
csiph-web