【发布时间】:2018-10-10 17:06:01
【问题描述】:
我有一个问题,可能是微不足道的......
运算符重载对返回类型有限制吗?
我试图重载运算符 +,在参数中我有两个 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;
}
【问题讨论】:
-
int operator+(Nodo a,Nodo b)是可能的。 -
" 我想返回类型必须是参数之一?" - 不,它没有。
-
在什么情况下不起作用?任何具体的错误信息?出乎意料的行为?它是否打开了通往时空之外的可怕憎恶的门户?
-
编辑问题
标签: c++ operator-overloading return-type