示例
class
Base {
public
:
void
fnc();
};
class
Derived:
public
Base
{
public
:
void
fnc(){}
};
void
call
Derived
Function(
Base
*ptr
){
Derived
*dp = (
Derived
*) ptr;
dp->fnc();
}
解决方案
不要将一个类的指针强制转换成并非其继承自的类的指针。为避免错误,对于向下强制数据转换,不要使用指针。而是使用虚函数。
class
Base {
public
:
virtual void
fnc();
};
class
Derived:
public
Base
{
public
:
virtual
void
fnc(){}
};
void
callDerivedFunction
(
Base
*ptr
){
ptr
->fnc();
}