在刷程序員面試寶典時看到這樣一題:
#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()函數聲明爲虛函數;