对如何重载 == 运算符感到困惑
Confused on how to overload the == operator
我的任务是让我们重载==
、<
和>
运算符。我知道运算符重载本质上覆盖了运算符的代码。我找到了一种使+
和-
运算符过载的方法。当我尝试重载==
运算符时,出现了我的问题。也许我做错了,但我正在尝试创建一个函数来返回一个字符串,说明它们是否相等。
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>
运算符(,或者只是提供隐含的行为。排除项是新的\删除和类型转换运算符。
相关文章:
- C++运算符 () 重载
- C++加号运算符的重载
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- C++ 中的按位运算符和重载
- 为什么选择转换运算符的重载?
- C++ 类的构造函数和函数调用运算符 () 重载之间的歧义
- 提升错误:"运算符=="的重载不明确
- 为模板类中的>>运算符和<<运算符实现重载
- 当取消引用运算符 (*) 重载时,*this 的使用是否受到影响?
- 模板化转换运算符的重载解析
- 运算符<<矢量重载
- C++ 运算符删除重载对派生类不起作用
- C++自定义控制台类 - 如何处理运算符未重载"<<"的对象?
- C++运算符新重载、编译错误
- 如何通过运算符<<的重载访问受保护的功能?C++
- 重载前增量运算符使用重载后增量运算符内的变量结果
- 不相关的已删除运算符更改重载解析的行为
- 提升概念检查运算符()重载
- 输出流运算符的重载
- 为什么运算符 [] 不重载左值和右值?