C++ 比较两个没有公共getter的相同类型的对象是否相等?
我有一个有几个成员的班。到目前为止,我的课堂上没有我喜欢的获得者,因为我不想让人们暴露课堂的细节。然后,我必须比较这个类的两个对象是否相等。我想不出一个办法来创造几个公众人物。我真的不想这样做来保持封装。还有别的办法吗C++ 比较两个没有公共getter的相同类型的对象是否相等?,c++,C++,我有一个有几个成员的班。到目前为止,我的课堂上没有我喜欢的获得者,因为我不想让人们暴露课堂的细节。然后,我必须比较这个类的两个对象是否相等。我想不出一个办法来创造几个公众人物。我真的不想这样做来保持封装。还有别的办法吗 class-Foo { 公众: 布尔等于(常量Foo和其他)常量; 私人: 布尔x; //许多其他成员 }; bool Foo::等于(常量Foo和其他)常量 { //我是否必须创建并使用公共函数other.GetX()? } 您可以创建自己的公共平等成员运算符: class F
class-Foo
{
公众:
布尔等于(常量Foo和其他)常量;
私人:
布尔x;
//许多其他成员
};
bool Foo::等于(常量Foo和其他)常量
{
//我是否必须创建并使用公共函数other.GetX()?
}
您可以创建自己的公共平等成员运算符:
class Foo
{
public:
bool operator ==(Foo const& rhs) const
{
return x == rhs.x;
}
};
使用示例:
Foo a, b;
assert(a == b);
@0x499602D2已经给出了一个很好的答案,解释了如何执行此操作
此外,我认为您尚未了解的关键点是访问说明符(
protected
和private
)应用于类级别,而不是实例级别。所以一个类的一个实例可以访问另一个实例的私有成员。好吧,protected
确实适用于实例级别,不是吗?@jrok:类的静态
方法可以访问所有类的protected
和private
数据,但我明白你的意思protected
很奇怪。@jrok:不知道你的意思。您仍然可以执行void foo(T&rhs){this->x=rhs.x;}
即使x
受到保护
。@OliCharlesworth我的意思是。很多人都希望这能奏效。如果foo
引用S
,而不是Base
,则它确实有效。这确实有点奇怪。@jrok:啊,是的,同意了<一旦涉及继承,代码>受保护就很复杂!