我有一个有几个成员的班级。到目前为止,我成功地在课堂上没有吸气员,因为我不希望人们暴露出班级的具体细节。然后我不得不比较这个类的两个对象是否相等。我想不出创造几个公共吸气剂的方法。我真的不想这样做以保持封装。还有另一种方式吗?
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()?
}
答案 0 :(得分:2)
您可以创建自己的公共平等成员运算符:
class Foo
{
public:
bool operator ==(Foo const& rhs) const
{
return x == rhs.x;
}
};
使用示例:
Foo a, b;
assert(a == b);
答案 1 :(得分:2)
@ 0x499602D2已经给出了一个很好的答案,解释了如何做到这一点。
为了补充这一点,我认为您尚未提到的关键点是访问说明符(protected
和private
)适用于类级别,不是实例级别。因此,类的一个实例可以访问另一个实例的私有成员。