Перегрузка с помощью операторного метода

«Операторный» метод имеет следующий формат:

<Тип результата> operator<Название оператора>(
     [<Тип> <Название параметра1>[, ..., <Тип> <Название параметраN>]])
{
   // Тело метода
}

Название «операторного» метода состоит из слова operator, после которого указывается перегружаемый оператор, например, operator+, operator- и т. д. Внутри круглых скобок указывается тип, объект которого может быть расположен в выражении справа от перегружаемого оператора. Следовательно, для каждого типа, с которым может взаимодействовать экземпляр класса внутри выражения, необходимо создать отдельный «операторный» метод. Например, чтобы сложить объект с целым числом следует создать метод operator+(int x), а для сложения с вещественным числом — метод operator+(double x). Внутри метода доступен указатель this на объект, который расположен слева от оператора. Таким образом, внутри метода можно напрямую обращаться к атрибутам и методам класса. Пример перегрузки оператора + для сложения объекта с целым числом и возвратом нового объекта:

C C::operator+(int x) {     // Объект класса C + целое число
   C newobj;                // Создаем временный объект
   newobj.x_ = x_ + x;      // x_ - закрытый член класса C
   return newobj;           // Возвращаем временный объект
}

Метод будет вызван в такой ситуации:

C obj1(10), obj2;
obj2 = obj1 + 20;
std::cout << obj2.getX() << std::endl; // 30

Однако, если будет следующая ситуация, то метод вызван не будет, т. к. объект должен быть расположен слева от оператора, а не справа:

obj2 = 20 + obj1;           // Метод C::operator+(int x) не вызывается!

Перегрузить оператор + в этом случае позволяют дружественные функции.

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов