2013-06-21 115 views
3

我有幾個成員的課。我迄今爲止在我的班級中沒有任何獲得者,因爲我不想讓人們暴露班級的具體情況。然後我必須比較這個類的兩個對象是否相等。我想不出創造幾個公共獲得者的方法。我真的不想這樣做,以保持封裝。有另一種方法嗎?比較兩個相同類型的對象是否相等,沒有公共getters?

class Foo 
{ 
public: 
    bool Equals(const Foo &other) const; 
private: 
    bool x; 
    // lots of other members 
}; 

bool Foo::Equals(const Foo &other) const 
{ 
    // would I have to create and use public function other.GetX()? 
} 

回答

2

您可以創建自己的公衆的平等成員運算符:使用

class Foo 
{ 
    public: 
     bool operator ==(Foo const& rhs) const 
     { 
      return x == rhs.x; 
     } 
}; 

例子:

Foo a, b; 

assert(a == b); 
2

@ 0x499602D2已經給出很好的答案,解釋如何做到這一點。

要補充的,我想你還沒有發現罷了關鍵的一點是,訪問說明(protectedprivate)適用於水平,而不是實例水平。所以一個類的一個實例可以訪問另一個實例的私有成員。

+0

那麼,'保護'確實適用於實例級別,不是嗎? – jrok

+0

@jrok:這個類的一個'static'方法可以訪問所有類的'protected'和'private'數據,但我明白你的意思。 '保護'只是很奇怪。 –

+0

@jrok:不確定你的意思。你仍然可以做'void foo(T&rhs){this-> x = rhs.x; }'即使'x'是'protected' ... –

相關問題