同一类下两个对象的比较

Gal*_*age 4 c++ comparison

我还是 C++ 的新手(一般编程),如果这个问题很愚蠢或被问过很多次,请原谅我。这是问题..假设在同一个类下有两个对象 A 和 B。

例如

  class Fruit{
  int apple;
  int banana;
      fruit(int x, int y){
       apple=x;
       banana=y;
      }
  }
  Fruit A(1,1);
  Fruit B(1,1);
Run Code Online (Sandbox Code Playgroud)

如果我想检查对象 A 的内容是否与对象 B 的内容相同,我是否必须比较从 A 到 B 的每个变量,或者

   if(Object A == Object B)
   return true;
Run Code Online (Sandbox Code Playgroud)

会做这份工作吗?

vso*_*tco 6

if(Object A == Object B)
    return true;
Run Code Online (Sandbox Code Playgroud)

会做这份工作吗?不,它不会,它甚至不会编译

错误:“operator==”不匹配(操作数类型为“Fruit”和“Fruit”)

你需要实现一个比较operator==,比如

bool Fruit::operator==(const Fruit& rhs) const
{
    return (apple == rhs.apple) && (banana == rhs.banana);
    // or, in C++11 (must #include <tuple>) 
    // return std::tie(apple, banana) == std::tie(rhs.apple, rhs.banana); 
}
Run Code Online (Sandbox Code Playgroud)

  • @Galaxyvintage 当您编写 `fruit1==fruit2` 时,编译器会将其转换为 `fruit1.operator==(fruit2)`。所以 `operator==` 像任何其他函数一样在左侧实例上被调用。其余的我认为很清楚,您只是在逐场比较。 (3认同)
  • 避免所有`std::tie` 样板文件的C++14 技巧 - 定义另一个成员函数`auto members() const { return std::tie(...); }` 那么上述操作符的主体就变成了`return members() == rhs.members();` (3认同)