375____________________Часть III. Современное программирование на С+ +

• Операции преобразования

• Дружественные операции

• Индексная операция operator [ ]

Операции в качестве функций

Операции, знакомые нам по выражениям из языков высокого уровня, в действительности отличаются от тех, которые компьютер использует на уровне 'машинных команд. Такие обозначения, как + или -, заменяются на команды сложения и вычитания, а содержимое скобок функций — на адреса функций и вызовы команд. Если вам приходилось писать или изучать программы на ассемблере, то вы наверняка пользовались подобными командами.

Смысл вышесказанного состоит в том, что операции — это символические обозначения, которые компилятор заменяет командами. На уровне ассемблерного кода это — мнемонические имена, на машинном уровне — числа. Программируя на C++, мы обращаемся к ним посредством одно- или двухсимвольных операций. Теперь давайте попытаемся взглянуть на операции как на функции.

Синтаксис оператор-функций

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

Чтобы реализовать эти возможности на практике, надо прежде всего изучить синтаксис оператор-функций. В общем виде он имеет следующий вид:

return_type operator operator token( [ argi, arg2 ]);

Возвращаемый тип (return_type) определяется вами; присутствие ключевого слова operator обязательно; operator_token — это конкретный знак перегружаемой операции. Вы можете определить оператор-функцию без аргументов, с одним, или с двумя аргументами. Это очень похоже на объявление обычной функции, если не считать ключевого слова operator и использования вместо имени функции знака операции:

return_type function_name( [ argument_list ] );

Наибольшее различие заключается в присутствии ключевого слова operator и в том, что количество аргументов не может быть более двух. Причина такого ограничения числа аргументов в том, что обычно их число у оператор-функций такое же, как и у соответствующих им операций, работающих с базовыми типами данных.