让我们看一下这段代码:
class CBase
{
public:
virtual vfunc() { cout << "CBase::vfunc()" << endl; }
};
class CChild: public CBase
{
public:
vfunc() { cout << "CChild::vfunc()" << endl; }
};
int main()
{
CBase *pBase = new CBase;
((CChild*)pBase)->vfunc(); // !!! important
delete pBase;
return 0;
}
输出结果为:
CBase::vfunc()
但我想看到:CChild::vfunc()
使用((CChild*)pBase)显式转换为类型"CChild*"。那么为什么要调用派生的vfunc()函数,我需要将"important"字符串替换为:((CChild*)pBase)->CChild::vfunc();
CBase*
)可以指向从CBase
派生出来的类型的对象(比如CChild
)。但这不是你所做的:你的基类指针指向了一个基类对象。如果你有一个例子,比如CBase* p = new CChild();
,那么p
将是一个指向派生类对象的基类指针。 - James McNellis