2016-03-28 76 views

回答

0

我不相信在不同訪問級別的方法/變量之間有任何運行時差異。這一切都是在編譯時執行的。

1

對於類對象的內存佈局,從給定的訪問說明符開始,直到下一個編譯器必須將數據成員放在增加的地址處。更一般地說,它必須使成員具有相同的訪問級別,地址不斷增加。對於不同訪問級別的成員來說,情況並非如此。

C++ 11 9.2節/ 14:

」具有相同的訪問控制(第11)(非聯合)類的非靜態數據成員被分配,以便 以後構件具有類對象內的更高地址。未指定具有不同訪問控制的成員的非靜態數據分配順序 。

這是他們唯一(的影響)運行時的效果,這東西可容納措辭「內部機制」,我所知道的。

所有其餘的檢查都在編譯時。

0

我認爲私有和受保護的,都只作爲訪問說明符。只有我們可以實現向其他人提供數據訪問權限。這些訪問權限決定編譯時間。

大多數使用Private和Protected實現繼承和數據封裝。只是看到下面的例子:

class Base { 

private: 
    int MyPrivateInt; 
protected: 
    int MyProtectedInt; 
public: 
    int MyPublicInt; 
} 

class Derived : Base 
{ 
public: 
    int foo1() { return MyPrivateInt;} // Won't compile! 
    int foo2() { return MyProtectedInt;} // OK 
    int foo3() { return MyPublicInt;} // OK 
}; 

class Unrelated 
{ 
private: 
    Base B; 
public: 
    int foo1() { return B.MyPrivateInt;} // Won't compile! 
    int foo2() { return B.MyProtectedInt;} // Won't compile 
    int foo3() { return B.MyPublicInt;} // OK 
}; 
相關問題