首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问个虚函数有关问题

2012-02-05 
问个虚函数问题有对象A,B,C,其中B是A的派生类,C又是B的派生类;有如下调用:A*pA(A*)pC//pC是类C对象指针p

问个虚函数问题
有对象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;
}
//自己运行一下,就知道了

热点排行