在没有公共getter的情况下,比较两个相同类型的对象是否相等

Compare two objects of the same type for equality without public getters?

本文关键字:两个 同类型 是否 对象 比较 getter 情况下      更新时间:2023-10-16

我有一个有几个成员的类。到目前为止,我的课堂上还没有成功的赢家,这是我喜欢的,因为我不希望人们暴露课堂的细节。然后,我必须比较这一类的两个对象以获得相等性。我想不出有什么办法可以创造出几个公众人物。我真的不想这样做来保持封装。还有别的办法吗?

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

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

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

使用示例:

Foo a, b;
assert(a == b);

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

除此之外,我认为您还没有了解的关键点是访问说明符(protectedprivate)应用于级别,而不是实例级。因此,一个类的一个实例可以访问另一个实例的私有成员。