重载"+"运算符

Overloading "+"-operator

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

我试图在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;
}

定义了从Operatorsint的转换。

你需要写:

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<<的重载并打印总和。