範例
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;
}