類的繼承過程分爲公有繼承,保護繼承和私有繼承,無論哪一種繼承,基類的私有成員在派生類成員中都是不可見的,可是基類的私有成員是否被派生類繼承了呢?通過以下實驗即可知道。
代碼如下:
#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 ;
}
監視窗口如下圖:
運行結果如下:
由以上可知,基類的私有成員被派生類繼承了,而類的對象空間沒有響應的常規函數成員的分佈。同時根據類的對象的內存空間的分佈,我們可以在類外訪問類的私有成員。