我有一个问题,可能很简单...
运算符重载对返回类型有限制吗?
我试图重载运算符+,在参数中我有两个类为Nodo的对象,并且我想返回属性的总和(使用get方法),它们是int。
因此,我编写了一个外部函数int operator+(Nodo a,Nodo b)
,但此方法不起作用...因此,我尝试使用int operator+(int tot,Nod a)
,此方法起作用了。
我想返回类型必须是参数之一?
class Nodo
{
private:
Nodo *Next;
Employee *Emp;
public:
Nodo(){}
Nodo(Nodo *a,Employee *b):Next(a),Emp(b){}
virtual ~Nodo(){}
void SetNext(Nodo *a){Next=a;};
Nodo* GetNext(){return Next;}
void SetEmployee(Employee *emp){Emp=emp;}
Employee* GetEmployee(){return Emp;}
};
class Employee
{
private:
string name;
int salary;
public:
Employee(string name,int salary):name(name),salary(salary){}
virtual ~Employee() {}
string GetName(){return name;}
int GetSalary(){return salary;}
virtual void PrintInfo(){cout<<"Nome "<<name<<" Salario "<<salary<<endl;}
};
我尝试过
int operator+(Nodo a,Nodo b)
{
int totale;
totale=a.GetEmployee()->GetSalary()+b.GetEmployee()->GetSalary();
return totale;
}
结果是当机。
这项工作。
int operator+(int tot,Nodo a)
{
int totale;
totale=tot+a.GetEmployee()->GetSalary();
return totale;
}
答案 0 :(得分:0)
对于运算符的重载,有关于其可以接受的参数的类型和数量的规则。
例如:
声明为成员函数的二进制运算符(例如+
)采用一个
论点如果声明为全局函数,则它们带有两个参数。
重载的运算符不能具有默认参数。
成员函数重载运算符的第一个参数始终是 为其调用运算符的对象的类类型的类型 (在其中声明运算符的类,或从中派生的类 该课)。没有为第一个参数提供转换。
但是没有关于返回类型的规则。因此,您可以从重载运算符返回任何类型。