基类成员变量与子类成员变量同名的问题

blueskyrabbit 2011-08-31 11:58:09
#include <iostream>
using namespace std;
class A
{
public:
int _a;
A()
{
_a=1;
}
void print()
{
printf("%d",_a);//********
}
};
class B :public A
{
public:
int _a;
B()
{
_a=2;
}
};
int main()
{
B b;
b.print();
printf("%d",b._a);
return 0;
}
输出结果为1,2 哪位帮忙解释一下?
请问标识********处的_a变量是在编译时定其值的呢,还是在运行时定其值的呢?
谢谢啦!
...全文
262 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2011-08-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 blueskyrabbit 的回复:]

如果是调用基类的成员函数的成员变量,由于子类继承了父类的成员函数,如果是运行时决定其值的话,输出应该是子类的同名成员函数吧?所以觉得2楼讲的有道理,大家认为呢?
[/Quote]
blueskyrabbit 2011-08-31
  • 打赏
  • 举报
回复
如果是调用基类的成员函数的成员变量,由于子类继承了父类的成员函数,如果是运行时决定其值的话,输出应该是子类的同名成员函数吧?所以觉得2楼讲的有道理,大家认为呢?
十八道胡同 2011-08-31
  • 打赏
  • 举报
回复
b.print(); 这里调用基类A里面的print(),A._a是1 。
printf("%d",b._a); 2


个人认为运行时
pathuang68 2011-08-31
  • 打赏
  • 举报
回复
1. 派生类覆盖了父类中成员变量的定义。
2. 编译时就确定了。
limang89 2011-08-31
  • 打赏
  • 举报
回复
print(); 是基类的函数,当然输出1了

64,318

社区成员

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

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