6.2.3 Операции и Определяемые Пользователем Типы

We use cookies. Read the Privacy and Cookie Policy

6.2.3 Операции и Определяемые Пользователем Типы

Функция операция должна или быть членом, или получать в качестве параметра по меньшей мере один объект класса (фунциям, которые переопределяют операции new и delete, это длать необязательно). Это правило гарантирует, что пользовтель не может изменить смысл никакого выражения, не включающего в себя определенного пользователем типа. В часности, невозможно определить функцию, которая действует ислючительно на указатели.

Функция операция, первым параметром которой предполагется основной встроенный тип, не может быть функцией членом. Рассмотрим, например, сложение комплексной переменной aa с целым 2: aa+2, при подходящим образом описанной функции члне, может быть проинтерпретировано как aa.operator+(2), но с 2+aa это не может быть сделано, потому что нет такого класса int, для которого можно было бы определить + так, чтобы это означало 2.operator+(aa). Даже если бы такой тип был, то для

того, чтобы обработать и 2+aa и aa+2, понадобилось бы две различных функции члена. Так как компилятор не знает смысла +, определяемого пользователем, то не может предполагать, что он коммутативен, и интерпретировать 2+aa как aa+2. С этим примером могут легко справиться функции друзья.

Все функции операции по определению перегружены. Функция операция задает новый смысл операции в дополнение к встроеному определению, и может существовать несколько функций опраций с одним и тем же именем, если в типах их параметров имеются отличия, различимые для компилятора, чтобы он мог различать их при обращении (см. #4.6.7).