返回类型重载运算符

时间:2018-10-10 17:06:01

标签: c++ operator-overloading return-type

我有一个问题,可能很简单... 运算符重载对返回类型有限制吗? 我试图重载运算符+,在参数中我有两个类为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;
}

1 个答案:

答案 0 :(得分:0)

对于运算符的重载,有关于其可以接受的参数的类型数量的规则。
例如:

  1. 声明为成员函数的二进制运算符(例如+)采用一个 论点如果声明为全局函数,则它们带有两个参数。

  2. 重载的运算符不能具有默认参数。

  3. 成员函数重载运算符的第一个参数始终是 为其调用运算符的对象的类类型的类型 (在其中声明运算符的类,或从中派生的类 该课)。没有为第一个参数提供转换。

但是没有关于返回类型的规则。因此,您可以从重载运算符返回任何类型。

相关问题