Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Virtual Constructor

Reply
Thread Tools

Virtual Constructor

 
 
Zeh Mau
Guest
Posts: n/a
 
      11-01-2006
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.

 
Reply With Quote
 
 
 
 
Alf P. Steinbach
Guest
Posts: n/a
 
      11-01-2006
* Zeh Mau:
>
> Danke für Eure Hilfe.


Please post in English, not Krakatoan.


--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
 
Reply With Quote
 
 
 
 
ralph
Guest
Posts: n/a
 
      11-01-2006
Zeh Mau wrote:

> 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:erived(). 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.

 
Reply With Quote
 
Rolf Magnus
Guest
Posts: n/a
 
      11-01-2006
Wenn du auf deutsch Fragen stellen willst, wäre de.comp.lang.iso-c++
geeigneter.


Zeh Mau wrote:

> 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.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
A constructor calling another constructor (default constructor)? Generic Usenet Account C++ 10 11-28-2007 04:12 AM
Copy constructor hides default constructor Aire C++ 3 01-25-2004 05:47 PM
java like constructor calling constructor lallous C++ 5 01-23-2004 11:52 PM
calling a constructor within a constructor Brett Irving C++ 3 06-29-2003 10:43 AM
why it's not possible calling constructor from constructor? Giulio C++ 9 06-25-2003 03:56 PM



Advertisments