C++中的繼承問題

在刷程序員面試寶典時看到這樣一題:

#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()函數聲明爲虛函數;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章