382 Часть III. Современное программирование на C++
Операция |
Комментарий |
|
++ |
Постфиксный или префиксный |
инкремент (а++ соответствует а = а + 1) |
-- |
Постфиксный или префиксный |
декремент |
->* |
Указатель на ссылку |
|
-> |
Указатель |
|
0 |
Операция вызова функции |
|
[] |
Индексная операция |
|
В табл. 16.1 приведен список стандартных значений операций, которые допускают перегрузку. Классы не требуют обязательной перегрузки операций, но перегрузка может сделать работу с классами более удобной. Этим,
однако, не ограничивается сфера применения ключевого слова operator. *
Совет
Операция присваивания ^ должна быть функцией-членом класса. Более подробно эта важная оператор-функция освещена в главе 17. Неправильно определенная оператор-функция присваивания может привести к утечкам памяти в ваших программах.
Чтобы пытаться перегружать операции, следует четко представлять себе свойственные им особенности. Сюда входят количество аргументов, их типы, и результат. В качестве хорошего упражнения можно порекомендовать написать короткую программу, в которой можно было бы попробовать каждую операцию в действии.
Извращать общий смысл операции при ее переопределении нежелательно. Представляется разумным перегружать те операции, которые выглядят естественными для нового класса. Например, перегруженные операции ++ и — класса Date логично было бы использовать для увеличения и уменьшения значений календарных дат.
Пример 1. В этом разделе демонстрируется простой пример перегрузки операций. Мы перегрузим операцию сложения, а на ее примере рассмотрим синтаксис перегрузки и средства трассировки программ на C++. Пример предназначен исключительно для демонстрации неявной природы вызова оператор-функций; поэтому класс, представленный в листинге 16.1, может представлять интерес только в качестве учебного пособия.
1: // INT.CPP — Демонстрация простого случая перегрузки операций
2: ^include <iostream.h>
3: class INT