在刷程序员面试宝典时看到这样一题:
#include <iostream>
using namespace std;
class A
{
public:
int _a;
A()
{
_a = 1;
}
void print()
{
printf("%d", _a);
}
};
class B : classA
{
public:
int _a;
B()
{
_a = 2;
}
};
int main()
{
B b;
b.print();
printf("%d ",b._a);
}
答案输出为12;
答案解释是B类中的_a把A类中的_a"隐藏"了。在构造B类时,先调用A类的构造函数,所以A类的_a是1,而B类的_a是2;
可能许多人会认为答案是22,那么在这里如何才能让输出变成22呢?
第一个方法是在子类B中将从父类A继承的print()函数显示的写出来;
第二个方法是将父类A中的print()函数声明为虚函数;