Я новичок в C++ и пытаюсь понять концепции перегрузки.
"Перегрузка операторов" - общий термин для предоставления пользовательской реализации для одного из операторов 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), а в худшем случае это будет лучшим совпадением во время поиска имени. Но "перегрузка оператора" все равно застряла.
И наоборот, если вы попытались полностью переопределить существующую перегрузку оператора, ваш компилятор и/или компоновщик помешали бы сборке преуспеть, поэтому "переопределение оператора" не является принятым термином для всего, что работает.