比较两个相同类型的对象是否相同,没有公共getter?

时间:2013-06-21 17:22:12

标签: c++

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

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 个答案:

答案 0 :(得分:2)

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

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

使用示例:

Foo a, b;

assert(a == b);

答案 1 :(得分:2)

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

为了补充这一点,我认为您尚未提到的关键点是访问说明符(protectedprivate)适用于级别,不是实例级别。因此,类的一个实例可以访问另一个实例的私有成员。