Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Перегрузка с помощью операторного метода
«Операторный» метод имеет следующий формат:
<Тип результата> 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) не вызывается!
Перегрузить оператор +
в этом случае позволяют дружественные функции.
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов