class Foo
{
public:
void someFunk(Foo &bar);
private:
int a;
...
};
void Foo::someFunk(Foo &bar)
{
a = bar.a;
}
我注意到作爲參數傳遞的對象被允許訪問私有數據成員。我可以看到爲什麼這個指針,但不應該作爲參數傳遞的對象必須調用訪問器?我認爲這是錯誤的,但代碼正在爲我編譯。類對象作爲參數傳遞,訪問他們自己的私有成員
class Foo
{
public:
void someFunk(Foo &bar);
private:
int a;
...
};
void Foo::someFunk(Foo &bar)
{
a = bar.a;
}
我注意到作爲參數傳遞的對象被允許訪問私有數據成員。我可以看到爲什麼這個指針,但不應該作爲參數傳遞的對象必須調用訪問器?我認爲這是錯誤的,但代碼正在爲我編譯。類對象作爲參數傳遞,訪問他們自己的私有成員
我不知道官方的理由是什麼,但在我看來,能夠訪問您自己班級的另一個對象的私有成員不會破壞封裝,也不會產生任何額外的耦合。
封裝的一點是,類A的對象不應該知道類B的對象的內部工作,以便B的實現可以改變而不影響A.但是,根據定義,類A的任何對象都知道換句話說,談論兩個不同類別之間的耦合是有意義的,但談論同一類別的兩個對象之間的耦合是沒有意義的。
在更實用的層面上,如果您無法訪問同一類的對象的私有成員,那麼您將如何實現複製構造函數?你必須爲每個私人成員設置一個訪問者,這個訪問者距離公開只有一步之遙。更不用說爲每個私人成員提供一個getter會使你的班級變得不必要的龐大而難以維護。
它取決於語言 - 在C#中(和C++看起來)成員對於類而不是實例是私有的。在Ruby等其他語言中,只有實例才能訪問成員。
看起來像是堆棧溢出問題,而不是程序員Stackexchange。 – Carson63000 2011-04-09 09:22:56