überschreiben der virtuellen Funktion nicht immer aufgerufen

eine genauere version der code ist:

class SomeParam;
class IBase
{
public:
    virtual void Func(SomeParam* param = NULL)
    {
        cout << "Base func";
    }
};

class DerivedA : public IBase
{
public:
    void Func()
    {
        //do some custom stuff
        cout << "DerivedA func";
        IBase::Func();
    }
};

class DerivedB : public IBase
{
public:
    void Func()
    {
        //do some custom stuff
        cout << "DerivedB func";
        IBase::Func();
    }
};

//at somewhere else
void FuncCaller(IBase *instance1, IBase *instance2)
{
    IBase *i1 = instance1;
    IBase *i2 = instance2;
    i1->Func();
    i2->Func();
}

DerivedA *a = new DerivedA;
DerivedB *b = new DerivedB;
FuncCaller(a,b);

Gibt mir:
"Base " func"
"Base " func"

Funktioniert, wie erwartet. Pls überprüfen, die Sie kompilieren die richtige Datei.
Funktioniert gut für mich. Können Sie Ihre ist code?
Ich habe versucht zu kompilieren, das mit Visual Studio 2005 und ich bekomme die erwartete Ausgabe: DerivedA funcBase funcDerivedB funcBase func. Ist genau der gleiche code?
Ich habe den code Bearbeiten, entfernen Sie ein paar Leerzeichen, aber es ist möglich, dass ich geschraubt - kann einer von Euch prüfen in der original-version der Taz veröffentlicht?
nur eine Randnotiz : ich vermute, Sie nennen 'IBase', 'I', weil Sie denken, dass es wie eine Schnittstelle, aber ein interface sollte nur rein virtuelle Methoden.

InformationsquelleAutor Taz | 2010-02-23

Schreibe einen Kommentar