375____________________Часть III. Современное программирование на С+ +
• Операции преобразования
• Дружественные операции
• Индексная операция operator [ ]
Операции в качестве функций
Операции, знакомые нам по выражениям из языков высокого уровня, в действительности отличаются от тех, которые компьютер использует на уровне 'машинных команд. Такие обозначения, как + или -, заменяются на команды сложения и вычитания, а содержимое скобок функций — на адреса функций и вызовы команд. Если вам приходилось писать или изучать программы на ассемблере, то вы наверняка пользовались подобными командами.
Смысл вышесказанного состоит в том, что операции — это символические обозначения, которые компилятор заменяет командами. На уровне ассемблерного кода это — мнемонические имена, на машинном уровне — числа. Программируя на C++, мы обращаемся к ним посредством одно- или двухсимвольных операций. Теперь давайте попытаемся взглянуть на операции как на функции.
Синтаксис оператор-функций
Представление об операциях как о функциях — вот что поддерживает перегрузку операций. Определяя для ваших классов оператор-функции, вы обеспечиваете возможность оперировать с ними в столь же привычной и удобной манере, как и с данными базовых типов.
Чтобы реализовать эти возможности на практике, надо прежде всего изучить синтаксис оператор-функций. В общем виде он имеет следующий вид:
return_type operator operator token( [ argi, arg2 ]);
Возвращаемый тип (return_type) определяется вами; присутствие ключевого слова operator обязательно; operator_token — это конкретный знак перегружаемой операции. Вы можете определить оператор-функцию без аргументов, с одним, или с двумя аргументами. Это очень похоже на объявление обычной функции, если не считать ключевого слова operator и использования вместо имени функции знака операции:
return_type function_name( [ argument_list ] );
Наибольшее различие заключается в присутствии ключевого слова operator и в том, что количество аргументов не может быть более двух. Причина такого ограничения числа аргументов в том, что обычно их число у оператор-функций такое же, как и у соответствующих им операций, работающих с базовыми типами данных.