读书人

问个虚函数有关问题

发布时间: 2012-02-05 12:07:15 作者: rapoo

问个虚函数问题
有对象A,B,C,其中B是A的派生类,C又是B的派生类;有如下调用:

A *pA = (A*)pC;//pC是类C对象指针
pA-> Run();

这里,Run是一个虚函数,在类A中有实现,同时在类B中又有新的实现,而在类C中没有实现。

那么,请问这里pA-> Run()调用的是类A中的Run还是类B中的Run?为什么?

[解决办法]
A *pA = (A*)pC;//pC是类C对象指针
——这里子类对象指针赋给父类指针,不用作强制转换也可以。

请问这里pA-> Run()调用的是类A中的Run还是类B中的Run
——B中的,从指针或引用上调用虚函数,结果总是“the most derived”被调用,也就是说是类层次树中这个虚函数的最后一个覆盖(override)版本被调用。
[解决办法]
同意steedhorse(晨星)
不过题外话插一句,lz也太缺乏研究精神了,其实你写帖子的时候用来写个小程序,debug一把,不就知道了?
[解决办法]
using namespace std;

class A{
public:
virtual void Run()
{cout < < "A " < <endl;}
};

class B: public A {
public:
virtual void Run()
{cout < < "B " < <endl;}
};

class C:public B{
public:
/* virtual void Run()
{cout < < "C " < <endl;}*/
};


int main(){
C* pC = new C;
A *pA = (A*)pC;//pC是类C对象指针
pA-> Run();

system( "PAUSE ");
return EXIT_SUCCESS;
}
//自己运行一下,就知道了

读书人网 >C++

热点推荐