示例
class
Base {
public
:
void
fnc();
};
class
Derived:
public
Base {
public
:
void
fnc(){}
};
int
main(){
Derived d;
Base *basePtr = &d;
Derived *derivedPtr = &d;
basePtr->fnc();
//
calls Base::fnc()
derivedPtr->fnc();
//
calls 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();
//
calls
Derived
::fnc()
derivedPtr->fnc();
//
calls Derived::fnc()
return
0;
}