Перегрузка с помощью дружественной функции

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

friend C operator+(int x, C &obj);

Пример определения дружественной функции вне класса:

C operator+(int x, C &obj) {      // Целое число + объект класса C
   C newobj;
   newobj.x_ = obj.x_ + x;        // Обращение к x_ через параметр
   return newobj;
}

С помощью дружественной функции можно также заменить «операторный» метод. Тем не менее, стоит отдать предпочтение «операторным» методам, а дружественные функции применять в случаях, когда обойтись методом нельзя. В качестве примера перегрузим оператор + для сложения объекта с целым числом:

C operator+(C &obj, int x) {      // Объект класса C + целое число
   C newobj;
   newobj.x_ = obj.x_ + x;
   return newobj;
}

Если мы хотим, чтобы в выражении слева и справа от объекта могли быть расположены целые числа:

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

то при объявлении типа параметра нужно дополнительно указать ключевое слово const:

friend C operator+(int x, const C &obj);
friend C operator+(const C &obj, int x);

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

Помощь сайту

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

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