gpt4 book ai didi

c++ - 运算符==考虑非静态成员函数的重载

转载 作者:太空狗 更新时间:2023-10-29 19:49:00 31 4
gpt4 key购买 nike

我定义了这样一个类

using namespace std;
class foo {
public:
typedef std::pair< int, int > index;
bool operator == ( const index &l, const index &r )
{
return (l.first == r.first && l.second == r.second);
}
void bar()
{
index i1;
i1.first = 10;
i1.second = 20;
index i2;
i2.first = 10;
i2.second = 200;
if (i1 == i2)
cout << "equal\n";
}
};

但是我在 windows 中得到这个错误

error C2804: binary 'operator ==' has too many parameters

Linux 中的这个错误

operator==(const  std::pair<int, int>&, const std::pair<int, int>&)’ must take exactly one argument

我找到了这个主题 overloading operator== complaining of 'must take exactly one argument'并且似乎是类中静态和非静态函数的问题。但是我不知道如何应用 this

例如,这是不正确的

  bool operator == ( const index &r )
{
return (this->first == r.first && this->second == r.second);
}

我该如何解决?

最佳答案

operator== 可以通过两种方式实现:

  • 作为成员函数:在这种情况下,函数采用一个参数并在左侧操作数上调用,左侧操作数作为 this 指针隐式传递给函数。
  • 作为非成员函数,在这种情况下,函数有两个参数,左操作数和右操作数。

因为你正在为 std::pair 实现 operator==,你不能将它实现为成员函数(std::pair).您剩下的选项是非成员函数。

所以在类外实现它:

bool operator==(std::pair<int,int> const & l, std::pair<int,int> const & r)
{
return (l.first == r.first && l.second == r.second);
}

但是你真的不需要自己实现它,除非你想以不同的方式实现它。标准库已经提供了一个 generic version operator== for std::pair 按字典顺序比较对中的值,就像我在上面所做的那样,即将 first 进行比较>firstsecondsecond。如果您需要对它们进行不同的比较,请提供您自己的特定定义(非模板版本)。

当您需要为定义的类型实现operator== 时,上述几点值得注意。

关于c++ - 运算符==考虑非静态成员函数的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14423284/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com