对如何重载 == 运算符感到困惑

Confused on how to overload the == operator

本文关键字:运算符 何重载 重载      更新时间:2023-10-16

我的任务是让我们重载==<>运算符。我知道运算符重载本质上覆盖了运算符的代码。我找到了一种使+-运算符过载的方法。当我尝试重载==运算符时,出现了我的问题。也许我做错了,但我正在尝试创建一个函数来返回一个字符串,说明它们是否相等。

Temperature operator == (Temperature const &temp1, Temperature const &temp2)
{
int holder;
if(temp1 == temp2)
{
holder = 1;
}
return holder;
}

我还尝试返回 1,以便我可以在 main 函数中创建一个 if 语句来检查它们是否相等。

Temperature operator == (Temperature const &temp1, Temperature const &temp2)
{
string holder;
if(temp1 == temp2)
{
holder = "temp1 is equal to temp2";
}
return holder;
}

我知道尝试之间没有太大区别,但我正在努力寻找方法。

运算符返回了错误的类型。 它应该看起来像这样:

bool operator == (Temperature const &temp1, Temperature const &temp2)

如果两者比较相等,则返回true,否则false返回。

你的代码有三个问题。首先,您尝试通过在比较运算符中调用这两个对象的比较运算符来比较两个对象(即调用自身(。其次,您返回的是对象值而不是bool比较失败时返回未初始化的值。

从您的代码中可以明显看出,Temperature可以从int进行上下文转换,即它是某种整体类型,在这种情况下,重载会导致问题。你必须有一个明确的重载。

通常,MyClass的独立式operator==可能如下所示:

bool operator == (MyClass const &a1, MyClass const &a2)
{
return  (a1.value1 == a2.value1) && (a1.value2 == a2.value2); 
}

当然,它应该是一个朋友功能或可以访问类成员。

重载运算符的要点是为特定类型的参数定义它们。它们是函数,就像任何其他重载函数一样,必须与该运算符的其他实例不同。它们可能会引入新的行为(例如:<<和>><iostream>运算符(,或者只是提供隐含的行为。排除项是新的\删除和类型转换运算符。