#include <iostream>
using namespace std;
class test{
private:
int a;
int b;
public:
test(int a = 1, int b = 2){
this->a = a;
this->b = b;
}
int re(test ccc){
a = ccc.a + 444;
b = ccc.b + 444;
}
};
为什么re函数中的ccc可以直接调用a和b而不报错?
怪我咯2017-04-17 13:44:40
搜尋了下(關鍵字:c++存取類別私有變數),這裡有不錯的解釋:
http://stackoverflow.com/questions/7396846/with-a-private-modifier-why-can-the-member-in-other-objects-be-accessed-directl
好問題。重點是 C++ 中的保護是類別層級的,而不是物件層級的。因此,在一個物件上呼叫的方法可以存取同一類別的任何其他實例的私有成員。
如果您看到保護的作用是允許封裝以確保類別的編寫者可以建立內聚的類,並且不必防止外部程式碼修改物件內容,那麼這是有道理的。
關於真正的「為什麼?」的另一個想法。考慮一下您如何編寫幾乎所有複製構造函數;您想要存取原始的底層資料結構,而不是其呈現的介面。