重载"+"运算符
Overloading "+"-operator
我试图在c++中重载+操作符,但得到以下错误:
operator .cpp: In function ' int main() ':
operator .cpp: 23:17:错误:无法在初始化时将' Operators '转换为' int '
这是我的代码:
#include <iostream>
using namespace std;
class Operators{
private:
int num1;
public:
Operators(int num1){
this->num1 = num1;
}
Operators operator+(Operators o){
return Operators(num1 + o.num1);
}
};
int main(){
Operators o1(5);
Operators o2(10);
Operators res = o1 + o2; // EDITED
cout << res;
}
你能帮帮我吗?
我知道,在这种情况下,重载它是没有意义的,因为我可以直接说5+10
,但我只是在试验。
谢谢,我已经编辑了int
。
但现在我得到以下错误:
operator .cpp: In function ' int main() ':
operator .cpp: 25:10:错误:匹配' operator<<' in ' std::cout <<res '
[…]
这一行的问题:
int res = o1 + o2;
是你的operator +
的重载返回一个类型为Operators
的对象。这意味着您正在尝试从Operators
(o1 + o2
的结果)类型的临时对象初始化int
(res)
),但是没有用户定义的转换来执行此操作。
这就是编译器发出错误的原因。您可以通过向Operators
类添加一个转换操作符来轻松解决这个问题:
operator int () const { return num1; }
更新:
看来你的问题更新了。下面的第二行有问题:
Operators res = o1 + o2;
cout << res;
除非您为Operators
类定义了operator <<
的重载,否则编译器将不知道选择哪个operator <<
的重载来流式传输类型为Operators
的对象。
要解决这个问题,您可以:
- 定义到
int
的转换操作符,如上所示 为
Operators
定义operator <<
的过载,如下所示:friend std::ostream& operator << (std::ostream& o, Operators const& op) { o << op.num1; return o; }
下面是一个的实例
错误信息试图告诉您,o1 + o2
的类型是Operators
。
你不能把它赋值给int
您的operator+
返回一个Operators
对象。然后尝试将此结果赋值给int res
。您没有给出从Operators
对象转换到int
对象的方法。您可以提供一个转换操作符:
operator int() {
return num1;
}
定义了从Operators
到int
的转换。
你需要写:
int res = o1.getMethod() + o2.getMethod();
其中getMethod()是类中的一个公共方法,它返回私有整数num1。否则,你就无权使用它。试试。
将int
更改为Operators
,并实现自己的复制和默认构造函数。
#include <iostream>
class Operators
{
private:
int num1;
public:
Operators() = default;
Operators(Operators const& op) : num1(op.num1) {}
Operators(int num1)
{
this->num1 = num1;
}
Operators operator+(Operators o)
{
return num1 + o.num1;
}
};
int main()
{
Operators o1(5);
Operators o2(10), res;
res = o1 + o2;
std::cout << res;
}
为了进一步工作,创建operator<<
的重载并打印总和。
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板