範例

class Base {
public:
void fnc();
};

class Derived: public Base {
public:
void fnc(){}
};

int main(){
Derived d;

Base *basePtr = &d;
Derived *derivedPtr = &d;

basePtr->fnc();//呼叫 Base::fnc()
derivedPtr->fnc();  //呼叫 Derived::fnc()

return 0;
}

解決方案
請勿置換非虛擬函數。請將設計改成不使用基礎類別,或使基礎類別函數虛擬化,以確保多型行為。


class Base {
public:
virtual void fnc();
};

class Derived: public Base {
public:
void fnc(){}
};

int main(){
Derived d;

Base *basePtr = &d;
Derived *derivedPtr = &d;

basePtr->fnc();//呼叫 
Derived::fnc()
derivedPtr->fnc();  //呼叫 Derived::fnc()

return 0;
}