c++中操作符重载的语法是什么?

What is the syntax for Operator Overloading in C++?

本文关键字:语法 是什么 重载 操作符 c++      更新时间:2023-10-16

我当时正在学习c++,当我编写一个小程序来学习更多关于操作符重载的知识时,程序在主函数中出现了一个错误,我在这里写了"Ponto p1(1,5), p2(3,4), Soma;"。谁能告诉我如何正确使用操作符重载 ?谢谢你!

PS:这个程序是用我的母语葡萄牙语写的,但我想找到我的错误不会有问题。

#include <iostream>
using namespace std;
class Ponto
{
private:
    int x,y;
public:
    Ponto(int a, int b)
    {
       x = a;
       y = b;
    }
    Ponto operator+(Ponto p);
};
Ponto Ponto::operator+(Ponto p)
{
    int a, b;
    a = x + p.x;
    b = y + p.y;
    return Ponto(a, b);
}
int main(void)
{
    Ponto p1(1,5), p2(3,4), Soma; 
    Soma = p1.operator+(p2);
    return 0;
}

你没有默认构造函数,所以当它试图构造Soma时,你会得到一个错误。

一旦你提供了自己的构造函数,编译器提供的默认构造函数就不再生成了。你要么自己创建,要么给接受参数的构造函数的参数添加默认值。

您应该在适当的位置初始化Ponto Some,并设置一些值:Ponto Some = p1 + p2;

还应该将"constant reference" - reference to const object: const Ponto &name传递给操作符+。

所以,固定代码:
#include <iostream>
using namespace std;
class Ponto {
    int x, y;
public:
    Ponto(int, int);
    Ponto operator+(const Ponto&);
};
Ponto::Ponto(int a, int b) : x(a), y(b) {};  // Use 'initializer list'
Ponto Ponto::operator+(const Ponto &other) {
    // Not need to do calculations explicitly
    return Ponto(x+other.x, y+other.y);
}
int main() {
    Ponto p1(1, 5), p2(3, 4);
    // Not need to call operator+ explicitly - it's compiler's work
    Ponto Soma = p1 + p2;
    return 0;
}