2011-09-13 36 views

回答

23

好問題。關鍵是在C++中的保護是級別級別,而不是對象級別。因此,在一個對象上調用的方法可以訪問同一類的任何其他實例的私有成員。

如果您看到保護的作用是允許封裝以確保類的編寫者可以構建一個內聚類並且不必防止外部代碼修改對象內容,那麼這是有道理的。

另一個關於真正的「爲什麼?」的想法。考慮你如何編寫幾乎所有的拷貝構造函數;您希望訪問原始的底層數據結構,而不是其提供的接口。

+0

'私人'純粹在課堂上的作品。 '保護'[不]](http://stackoverflow.com/questions/3247671/accessing-protected-members-in-a-derived-class-c) – MSalters

+0

@ MSalters:當然可以。類的成員仍然可以更好地訪問該類類型的其他對象,包括訪問基類子對象(代碼所在的類類型的其他對象)中受保護成員的能力。 –

+0

C++中的訪問說明符管理對_names_的訪問,而不是對象。如果你能找到合法的方式來引用它們,實際上可以訪問不同類別的私人成員。 – bames53

4

類的任何成員函數以及構造函數都可以訪問私有數據。 這是調用方法的實例對象的私有成員或其他實例的私有成員。

在這種情況下,它是構造函數,它是其他實例(即a1,a2)。

0

短的答案:在class A成員方法,(對象/指針和static部件)的所有成員class A可以被訪問。

0
A(A a1, A a2) 
{ 
    a1.x = 10; 
    a2.x = 20; 
} 

現在從我的理解,你的問題是如何調用構造函數調用的對象可以訪問其他類成員變量?

現在,構造函數和參數a1,a2都是類作用域。因此,它可以訪問它的所有成員,而不管它的訪問級別如何。這也將在構造函數 -

this->x = a1.x; // Notice that "this" members can be accessed too. 
       // How ever both the member variables are different and are part of 
       // different objects. 
相關問題