Тип возврата Операторы перегрузки - PullRequest
0 голосов
/ 10 октября 2018

У меня есть вопросы, возможно, тривиальные ... Есть ограничения на тип возвращаемых данных с перегрузкой операторов?Я попытался перегрузить оператор +, в аргументах у меня было два объекта класса 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 голосов
/ 11 октября 2018

Существуют правила перегрузки операторов, относящиеся к типу и числу аргументов, которые они могут принимать.
Например:

  1. Бинарные операторы (такие как +), объявленные как функции-члены, принимают один аргумент;если они объявлены как глобальные функции, они принимают два аргумента.

  2. Перегруженные операторы не могут иметь аргументы по умолчанию.

  3. Первый аргумент для перегруженной функции-членаОператоры всегда имеют тип класса объекта, для которого вызывается оператор (класс, в котором объявлен оператор, или класс, производный от этого класса).Преобразования для первого аргумента не предоставляются.

Но НЕТ правил относительно типа возвращаемого значения.Таким образом, вы можете вернуть любой тип из перегруженного оператора.

...