類的繼承私有成員問題

類的繼承過程分爲公有繼承,保護繼承和私有繼承,無論哪一種繼承,基類的私有成員在派生類成員中都是不可見的,可是基類的私有成員是否被派生類繼承了呢?通過以下實驗即可知道。

代碼如下:

#include <iostream>
using namespace std;
class Base {
public:
Base():a(5){}
private:
     virtual void f() { cout << "Base::f" << endl; }
     int a;
 
};
class Derive : public Base{


};
void main() {
    Derive d;
    int** pVtab = (int**)&d;
    Fun  pFun = (Fun)pVtab[0][0];
    cout<<sizeof(Base)<<sizeof(Derive)<<endl;
    pFun();
    cout<<(int)pVtab[1]<<endl;
    return ;
}


監視窗口如下圖:


運行結果如下:

由以上可知,基類的私有成員被派生類繼承了,而類的對象空間沒有響應的常規函數成員的分佈。同時根據類的對象的內存空間的分佈,我們可以在類外訪問類的私有成員。

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