Virtual Constructor

Discussion in 'C++' started by Zeh Mau, Nov 1, 2006.

  1. Zeh Mau

    Zeh Mau Guest

    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.
     
    Zeh Mau, Nov 1, 2006
    #1
    1. Advertising

  2. * 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?
     
    Alf P. Steinbach, Nov 1, 2006
    #2
    1. Advertising

  3. Zeh Mau

    ralph Guest

    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::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.
     
    ralph, Nov 1, 2006
    #3
  4. Zeh Mau

    Rolf Magnus Guest

    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.
     
    Rolf Magnus, Nov 1, 2006
    #4
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Giulio
    Replies:
    9
    Views:
    1,047
    Patrick Kowalzick
    Jun 25, 2003
  2. Brett Irving
    Replies:
    3
    Views:
    3,337
    John Harrison
    Jun 29, 2003
  3. lallous
    Replies:
    5
    Views:
    8,828
    David Harmon
    Jan 23, 2004
  4. Aire
    Replies:
    3
    Views:
    470
    Mike Wahler
    Jan 25, 2004
  5. Generic Usenet Account
    Replies:
    10
    Views:
    2,248
Loading...

Share This Page