求教一个c++继承的问题

vigase_2019 2014-04-17 11:05:18
class A
{
public:
int _a;
A()
{ _a=1;
}
void print()
{
printf("%d",_a);
}
};
class B : public A
{
public:
int _a;
B()
{
_a=2;
}
};


int _tmain(int argc, _TCHAR* argv[])
{
B b;
b.print();
printf("%d",b._a);
getchar();
return 0;
}

代码如上 运行结果是:12 求教为什么第一个输出是1
...全文
104 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MBSHENG 2014-04-18
  • 打赏
  • 举报
回复
b.print()函数的执行过程如下(如有错误请纠正) b在当前自己的类中寻找print()函数,没有找到,然后从自己的父类中进行寻找,在A中找到了,调用之,但是里面有个_a属性,到底是A中的还是B中的呢?想想看,print知道B这个类吗?
火头军 2014-04-18
  • 打赏
  • 举报
回复
因为你B类继承A类 ,这个时候B里面有两个_a,一个是A的 继承来的,一个是自己的,print是A类的函数他调用的是就是A的
dophiJing 2014-04-18
  • 打赏
  • 举报
回复
B是A的派生类,B中没有print函数,调用时,访问的是父类的print函数,父类的函数智能访问父类的成员变量,因此输出的便是1
Hardworking2009 2014-04-18
  • 打赏
  • 举报
回复
楼上都说的很明白了。搞明白之后就别这么写了,CLASS B中不要在用_a,非得给自己找麻烦吗。
新手上路1234 2014-04-17
  • 打赏
  • 举报
回复
因为B继承了A的呀,当执行的时候先调用了A的函数里

64,654

社区成员

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

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