求问输出结果并给出原因,多谢
求问输出结果并给出原因,谢谢#include iostreamusing namespace stdclass A{public:int _aA(){_a1}v
求问输出结果并给出原因,谢谢
#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);
}
[解决办法]name hiding,派生类的名字会覆盖基类的名字,所以 b.print(); 中的 _a 永远是 A::_a,但是printf("%d",b._a); 中的 _a,一会是 A::_a,一会是 B::_a.
[解决办法]B中定不定义int _a的区别在于要不要从A中继承。
[解决办法]是这样的。
B中有int _a, 那么 A::_a 和 _a是2个不同的变量,当然输出1 2
B中没有int _a, 那么只有1个A:: _a,在B中A::_a 和 _a是等价的,输出 2 2
[解决办法]1)
子类中使用了和父类变量同名的变量,同名的变量的名字就没有办法继承了,只能通过父类的名字才能访问了。
父类的同名变量被隐藏了。
从这个意义上说,3楼的说法也没有错误。
2)由于继承时,父类的所有成员变量,在子类中占有相同的空间,实际上 整个父类的所有成员变量,都被继承下来了,只有可不可以访问和访问方式的问题。
从这个意义上说,成员变量是完全继承了下来,子类的长度>= 父类的长度。