选哪个?为什么?

suffocater 2009-05-05 10:43:06
*. 下面的程序的输出结果为:( )

class CBaseClass
{
public:
CBaseClass(){
Init();
}
~CBaseClass(void){};

virtual int Init(void){
m_iInitVar = 1;
return 0;
}

int GetResult(void){
return m_iInitVar;
}
int m_iInitVar;
};

class C Derived Class : public CBaseClass
{
public:
C DerivedClass(void) {};
~CDerivedClass(void) {};
virtual int Init(void) {
m_iInitVar = 2;
return 0;
}
};

int main(int argc, _TCHAR* argv[]) {
CBaseClass * pCBaseA = new CBaseClass();
CBaseClass * pCBaseB = new CDerivedClass();
CDerivedClass * pCDerivedClass = new CDerivedClass ();

int i = pCBaseA->GetResult();
int j = pCBaseB->GetResult();
int k = pCDerivedClass ->GetResult();

cout<<i<<","<<j<<","<<k<<endl;

delete pCBaseA;
delete pCBaseB;
delete pCNewDClass;

return 0;
}

A) 1,1,1
B) 1,2,1
C) 1,2,2
D) 2,2,2
...全文
73 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
suffocater 2009-05-25
  • 打赏
  • 举报
回复
同一个类的成员函数之间的呼叫不会有多态性,即成员函数呼叫成员函数时,会呼叫本身类之下的成员函数,而不会呼叫子类或者父类的成员函数,即使该成员函数被声明为虚函数。事实上,成员函数无法呼叫子类或父类的成员函数,即使该函数被生命为public。
suffocater 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 suffocater 的回复:]
同一个类的成员函数之间的呼叫不会有多态性,即成员函数呼叫成员函数时,会呼叫本身类之下的成员函数,而不会呼叫子类或者父类的成员函数,即使该成员函数被声明为虚函数。事实上,成员函数无法呼叫子类或父类的成员函数,即使该函数被生命为public。
[/Quote]

自己订正——上述说法错了,正确的如下:
在构造和析构函数中调用虚函数不会有多态性,普通函数中调用虚函数会有多态性。(Effective C++条款9)
w0911h 2009-05-05
  • 打赏
  • 举报
回复
选A,自己看为什么吧。。。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧