1. 程式人生 > >private、public、protected變數在類外是否可以訪問和記憶體分佈有關嗎

private、public、protected變數在類外是否可以訪問和記憶體分佈有關嗎

protected 、public、private成員變數,由於限定符屬性不同,在類外訪問許可權也不同。

如private成員變數繼承後變為不可見,那麼不同限定符定義的變數在記憶體中地址連續嗎?

如果連續,那為什麼private成員變數繼承後不可見呢?

class A
{
public:
       A()
       {
              _a = 1;
              _b = 2;
       }
public:
       int _a;
private:
       int _b;
};
class B :public A
{
};
int main()
{
       B b;   
}

在記憶體中&b:

我們可以看到變數_a 和變數_b地址連續。那為什麼private 的_b是不可見呢?

int main()
{
       B b;   
       b._a;
       b._b;
}

 訪問不可見的_b會出現編譯錯誤:

而我們又知道程式的編譯會經過4個過程:預處理,編譯,彙編,連結。當在彙編階段後生產機器程式碼,才有&b的記憶體。而訪問_b是編譯錯誤,也就意味著是否可以訪問不同限定符變數和地址是否無關,只是按照各限定符的語法來判斷是否可以訪問。