大家看看,这段代码,我这样理解对不对

dreamcs 2009-02-13 10:53:46
/////////////////////////////////////////////////////////////////////

#include <iostream>
using namespace std;
class A
{
public:
A(){ doSth(); }
virtual void doSth(){ printf("I am A");}
};

class B : public A
{
public:

virtual void doSth(){ printf("I am B");}
};
int main()
{
A a;
B b;
return 0;
}

//////////////////

I am AI am A

因为子类B在构造时,A先构造,B随后构造.A构造函数调用doSth时,子类B还不存在,所以只能调用本身的doSth
...全文
148 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
angle8129 2009-02-16
  • 打赏
  • 举报
回复
class B并没有定义构造函数,编译器自动为其生成默认构造函数(函数主体一部分来自基类构造函数),所以在定义b的时候,调用的是默认构造函数,得到I am A的结果
Feng_Fing 2009-02-13
  • 打赏
  • 举报
回复
学习学习~
dreamcs 2009-02-13
  • 打赏
  • 举报
回复
3q
waizqfor 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 dreamcs 的帖子:]
/////////////////////////////////////////////////////////////////////

#include <iostream>
using namespace std;
class A
{
public:
A(){ doSth(); }
virtual void doSth(){ printf("I am A");}
};

class B : public A
{
public:

virtual void doSth(){ printf("I am B");}
};
int main()
{
A a;
B b;
return 0;
}…
[/Quote]
可以怎么理解 LZ再好好看看虚函数
感觉你还不太认可自己的看法 把概念弄熟悉
baihacker 2009-02-13
  • 打赏
  • 举报
回复
嗯,说得差不多.

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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