2012-03-30 11 views
0

Möglichen Duplizieren Aufruf:
Calling virtual method in base class constructor
Calling virtual functions inside constructorseine geschützte virtuelle Methode in C++

Wie kann ich eine geschützte virtuelle Methode von einem Konstruktor in C++ anrufen?

class Foo 
{ 
    Foo(){ 
     printStuff(); // have also tried this->printStuff() 
    } 
    protected: 
    virtual void printStuff() {} 
} 

class ExtendedFoo : public Foo { 
    protected: 
    virtual void printStuff() { cout << "Stuff" << endl;} 
} 

... 

ExtendedFoo exFoo; // should print "Stuff" 
+0

siehe http://stackoverflow.com/questions/962132/calling-virtual-functions-inside-constructors auch –

Antwort

3

Es gibt kein Problem, eine geschützte Funktion aus dem Konstruktor in Aufruf - tun Sie es einfach. Was Sie jedoch zu haben scheinen, ist eine Implementierung in eine konkrete abgeleitete Klasse, z. B. ExtendedFoo, da es virtuell ist - oder? Das ist ein No-Go, da innerhalb des Foo-Konstruktors das Objekt, das erstellt wird, immer noch vom Typ Foo ist, nicht von ExtendedFoo, so dass kein virtueller Versand stattfinden kann. Wenn die geschützte Funktion nicht rein virtuell ist, wird die Foo-Implementierung aufgerufen, d. H. Der Konstruktor wird die klasseneigene Implementierung aufrufen.

+0

Nach Der Aufruf eines rein virtuellen Members innerhalb eines Konstruktors ist ein undefiniertes Verhalten. – j4x

+0

Ja, deshalb habe ich geschrieben, dass ein Aufruf an eine ** nicht-reine ** virtuelle Funktion "erfolgreich" sein wird. –

Verwandte Themen