C+;中运算符重载的语法是什么+;? 我正在学习C++,当我做了一个小程序来了解关于运算符重载< /强>时,程序在我写的“Poto P1(1,5),P2(3,4),索马”的main函数中给出了一个Erro。谁能给我解释一下如何正确使用操作符Overloagin?多谢各位
PS:这个程序是用我的母语葡萄牙语编写的,但我认为找到我的错误不会有问题C+;中运算符重载的语法是什么+;? 我正在学习C++,当我做了一个小程序来了解关于运算符重载< /强>时,程序在我写的“Poto P1(1,5),P2(3,4),索马”的main函数中给出了一个Erro。谁能给我解释一下如何正确使用操作符Overloagin?多谢各位,c++,class,operator-overloading,overloading,C++,Class,Operator Overloading,Overloading,PS:这个程序是用我的母语葡萄牙语编写的,但我认为找到我的错误不会有问题 #包括 使用名称空间std; 庞托级 { 私人: int x,y; 公众: 庞托(内部a、内部b) { x=a; y=b; } Ponto运算符+(Ponto p); }; Ponto Ponto::运算符+(Ponto p) { INTA,b; a=x+p.x; b=y+p.y; 返回庞托(a、b); } 内部主(空) { Ponto p1(1,5),p2(3,4),胞体; Soma=p1.算子+(p2); 返回0; }
#包括
使用名称空间std;
庞托级
{
私人:
int x,y;
公众:
庞托(内部a、内部b)
{
x=a;
y=b;
}
Ponto运算符+(Ponto p);
};
Ponto Ponto::运算符+(Ponto p)
{
INTA,b;
a=x+p.x;
b=y+p.y;
返回庞托(a、b);
}
内部主(空)
{
Ponto p1(1,5),p2(3,4),胞体;
Soma=p1.算子+(p2);
返回0;
}
您没有默认的构造函数,因此当它试图构造Soma
时,您会得到一个错误
一旦提供了自己的构造函数,就不再生成编译器提供的默认构造函数。您必须创建自己的构造函数,或者向接受参数的构造函数上的参数添加默认值。您没有默认构造函数,因此当它尝试构造
Soma
时,会出现错误
一旦提供了自己的构造函数,就不再生成编译器提供的默认构造函数。您必须创建自己的参数,或者向接受参数的构造函数上的参数添加默认值。您应该使用一些值初始化
Ponto-Some
:Ponto-Some=p1+p2代码>
您还应该将“常量引用”-对const对象的引用
:const-Ponto&name
传递到操作符+
所以,固定代码:
#包括
使用名称空间std;
庞托级{
int x,y;
公众:
庞托(国际,国际);
Ponto运算符+(常数Ponto&);
};
Ponto::Ponto(inta,intb):x(a),y(b){};//使用“初始值设定项列表”
Ponto Ponto::运算符+(常量Ponto和其他){
//不需要显式地进行计算
返回Ponto(x+other.x,y+other.y);
}
int main(){
Ponto p1(1,5),p2(3,4);
//不需要显式调用运算符+-这是编译器的工作
Ponto Soma=p1+p2;
返回0;
}
您应该使用某个值在适当的位置初始化Ponto Some
:Ponto Some=p1+p2代码>
您还应该将“常量引用”-对const对象的引用
:const-Ponto&name
传递到操作符+
所以,固定代码:
#包括
使用名称空间std;
庞托级{
int x,y;
公众:
庞托(国际,国际);
Ponto运算符+(常数Ponto&);
};
Ponto::Ponto(inta,intb):x(a),y(b){};//使用“初始值设定项列表”
Ponto Ponto::运算符+(常量Ponto和其他){
//不需要显式地进行计算
返回Ponto(x+other.x,y+other.y);
}
int main(){
Ponto p1(1,5),p2(3,4);
//不需要显式调用运算符+-这是编译器的工作
Ponto Soma=p1+p2;
返回0;
}
这与运算符重载无关。您没有默认构造函数,因此无法默认构造对象。您应该发布您得到的错误Ponto
没有默认构造函数(由于Ponto
声明了自己的构造函数,所以它被抑制),但由于Soma
没有初始值设定项,所以它是默认初始化的。这将导致编译错误,因为在Ponto
@Gabriel Mello中没有使用0参数的构造函数,为什么不正常调用运算符(Soma=p1+p2)?因为我试图通过创建简单代码来学习如何使用运算符重载语法。这与运算符重载无关。您没有默认构造函数,因此无法默认构造对象。您应该发布您得到的错误Ponto
没有默认构造函数(由于Ponto
声明了自己的构造函数,所以它被抑制),但由于Soma
没有初始值设定项,所以它是默认初始化的。这将导致编译错误,因为在@Gabriel Mello的Ponto
中没有使用0个参数的构造函数,为什么不正常调用操作符(Soma=p1+p2)?因为我试图通过创建一个简单的代码来学习如何使用运算符重载语法。感谢上帝,这只是构造函数,而不是运算符重载的语法!现在它工作得很好,谢谢你的帮助。感谢上帝,它只是构造函数,而不是运算符重载的语法!现在一切正常,谢谢你的帮助。
#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;
}
#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;
}