我正在学习C ++,当我做了一个小程序来了解更多关于运算符重载的程序时,程序在主函数中给出了一个错误,我写了" Ponto p1( 1,5),p2(3,4),Soma;" 。任何人都可以解释我如何正确使用运营商Overloagin 吗?谢谢。
PS:该程序采用我的母语Portugueses,但我认为找到我的错误不会有问题。
#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;
}
答案 0 :(得分:2)
您没有默认构造函数,因此当它尝试构造Soma
时,您会收到错误。
一旦提供了自己的构造函数,就不再生成编译器提供的默认构造函数。您必须自己创建或者在构造函数的参数上添加默认值。
答案 1 :(得分:2)
您应该使用某些值初始化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;
}