Virtual Constructor

Z

Zeh Mau

Virtuelle Konstruktoren

Ich habe gerade gelesen:
Konstruktoren dürfen nicht virtuell deklariert werden,
da beim Erzeugen von Objekten immer die tatsächliche Klasse
bereits zur Compilezeit festgelegt wird.

Leider verstehe ich diesen Satz nicht und wende mich deshalb an
die Newsgroup!

Kann mir bitte jemand erklären, was die obige Erklärung besagt?
<< die tatsächliche Klasse liegt zur Compilezeit fest bei der
Erzeugung
von Objekten >>

Danke für Eure Hilfe.
 
R

ralph

Zeh said:
Virtuelle Konstruktoren

Ich habe gerade gelesen:
Konstruktoren dürfen nicht virtuell deklariert werden,
da beim Erzeugen von Objekten immer die tatsächliche Klasse
bereits zur Compilezeit festgelegt wird.

Leider verstehe ich diesen Satz nicht und wende mich deshalb an
die Newsgroup!

Ist Dir aufgefallen, dass dies eine englischsprachige Gruppe ist?

class Base { public: virtual void foo(); };
class Derived { public: void foo(); };

Base* base = new Derived();
base->foo();

The last line calls Derived::foo because base points to a an object of
type Derived.
So the actual object behind the pointer decides which member functions
gets called.

When you call a constructor you don't have any object that can decide
which class' constructor gets called. How should polymorphic
constructors work?
Kann mir bitte jemand erklären, was die obige Erklärung besagt?
<< die tatsächliche Klasse liegt zur Compilezeit fest bei der
Erzeugung
von Objekten >>

Base* base = new Derived();
The compiler knows that it has to generate code that calls
Derived::Derived(). So it's known at compile time which class'
constructor shall be called. There is no need to defer this dicision to
run time.
Danke für Eure Hilfe.

You're welcome.
 
R

Rolf Magnus

Wenn du auf deutsch Fragen stellen willst, wäre de.comp.lang.iso-c++
geeigneter.


Zeh said:
Virtuelle Konstruktoren

Ich habe gerade gelesen:
Konstruktoren dürfen nicht virtuell deklariert werden,
da beim Erzeugen von Objekten immer die tatsächliche Klasse
bereits zur Compilezeit festgelegt wird.

Leider verstehe ich diesen Satz nicht und wende mich deshalb an
die Newsgroup!

Kann mir bitte jemand erklären, was die obige Erklärung besagt?
<< die tatsächliche Klasse liegt zur Compilezeit fest bei der
Erzeugung
von Objekten >>

Nun, wenn du ein Objekt erzeugst, gibst du dabei immer die konkrete Klasse
an. Wie soll das auch anders gehen? Virtuelle Memberfunktionen suchen zur
Laufzeit die Klasse des Objekts raus, für das sie aufgerufen werden, damit
die richtige Implementation ausgeführt wird. Wenn du das Objekt erzeugen
willst, ist aber logischerweise noch keins da. Daher kann der Compiler auch
die Klasse nicht automatisch erkennen. Du kannst du dem Compiler
schließlich nicht sagen: "Erzeuge mal ein Objekt von der Klasse, der dieses
Objekt dann nachher angehören wird". Du mußt ihm explizit die Klasse sagen,
und daher ergeben virtuelle Konstruktoren gar keinen Sinn.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top