3

我有一个有几个成员的班级。到目前为止,我的课堂上没有我喜欢的吸气剂,因为我不希望人们暴露课堂的细节。然后我不得不比较这个类的两个对象是否相等。我想不出创建几个公共吸气剂的方法。我真的不想这样做以保持封装。还有其他方法吗?

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()?
}
4

2 回答 2

2

您可以创建自己的公共平等成员运算符:

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

使用示例:

Foo a, b;

assert(a == b);
于 2013-06-21T17:24:05.220 回答
2

@0x499602D2 已经给出了一个很好的答案来解释如何做到这一点。

除此之外,我认为您尚未了解的关键点是访问说明符 ( protectedand private) 适用于级别,而不是实例级别。所以一个类的一个实例可以访问另一个实例的私有成员。

于 2013-06-21T17:30:12.480 回答