перегрузка оператора

0

Я новичок в C++ и пытаюсь понять концепции перегрузки.

  • 3
    Можете ли вы привести пример «переопределения оператора» или где вы его видели? Это не обычный термин.
  • 0
    Обычно вы ничего не можете переопределить в C ++ из-за правила единого определения, которое говорит, что все может быть определено не более одного раза.
Теги:

1 ответ

2

"Перегрузка операторов" - общий термин для предоставления пользовательской реализации для одного из операторов C++.

Он известен как "перегрузка", потому что в некоторых сценариях вы концептуально перегружаете operator@ функции operator@ (где @ - некоторый символ оператора) с новой перегрузкой, которая принимает объект вашего настраиваемого типа в качестве аргумента.

/**
 * Doesn't actually exist in this form, but conceptually
 * this exists built in to the language.
 */
int operator+(int, int);

/**
 * Your overload of the 'operator+' function, which takes
 * 'MyClass's.
 */
MyClass operator+(const MyClass&, const MyClass&);

Этот термин становится неточным, когда вы начинаете определять операторы как члены ваших типов, потому что MyClass::operator+ не перегружает ::operator+; в лучшем случае это скроет его (например, ADL), а в худшем случае это будет лучшим совпадением во время поиска имени. Но "перегрузка оператора" все равно застряла.

И наоборот, если вы попытались полностью переопределить существующую перегрузку оператора, ваш компилятор и/или компоновщик помешали бы сборке преуспеть, поэтому "переопределение оператора" не является принятым термином для всего, что работает.

  • 0
    Просто чтобы добавить к этому ответу, нет такой вещи, как переопределение оператора. Операторы есть, и нам разрешено перегружать большинство из них.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню