Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 比较两个没有公共getter的相同类型的对象是否相等?_C++ - Fatal编程技术网

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:啊,是的,同意了<一旦涉及继承,代码>受保护就很复杂!