Aufruf virtueller Methoden im Konstruktor



  • Hallo zusammen,

    wenn ich im Konstruktor eine virtuelle Methode
    aufrufe, wird die Methode der Basisklasse (bzw. die in dem
    Konstruktor bekannte Methode) aufgerufen.
    Das lieg (mit Sicherheit)/wahrscheinlich daran, dass
    die Konstruktoren in der Vererunbundshierachie von oben nach
    unten aufgerufen werden.

    Gibt es eine Möglichkeit doch eine virtuelle Methode aufzurufen...

    Gruß,
    CSpille



  • imho nein,

    bis der Konstruktor der abgeleiteten Klasse aufgerufen ist, _ist_ die Klasse eine Basisklasse, da ausgehend von der Basisklasse die abgeleitete Klasse erst konstruiert werden muss.
    Für was braucht man denn sowas überhaupt? 😕

    Hoffe ich konnte helfen.



  • bluecode schrieb:

    Für was braucht man denn sowas überhaupt? 😕

    brauchen kann man soetwas schon, wenn man virtuelle initialisierungsmethoden aufrufen will die man aus diversen gründen nicht dem kind überlassen will.

    aber es geht nicht. denn im Ctor von Base existiert Derived ja noch nicht.

    wenn du erklärst was du genau machen willst, lassen sich vielleicht lösungen erarbeiten



  • Ich möchte einen FileOutputStream und einen FileAppenderOutputStream machen...

    fopen(filename,"a"/*bzw. "w"*/);
    

    Deshalb wollte ich den Appender von dem OutputStream ableiten

    Gruß,
    CSpille



  • hi,

    dann übergibst deiner OutputStream im Konstruktor den einen Parameter, der sich ändert (also "a") oder ein flag oä:

    OutputStream::OutputStream(){/*mit "w"*/}
    OutputStream::OutputStream(char *param){/*mit param*/}
    OutputStreamAppender::OutputStreamAppender():OutputStream("a"){/*bla*/}
    

    Hoffe ich konnte helfen! :xmas1:



  • hmm...

    Dass ich das so machen kann ist klar...

    Dann nehm ich glaub ich lieber ne Abstrakte Basisklasse und mach das
    jeweils explizit im Konstruktor...

    Danke,
    CSpille


Anmelden zum Antworten