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

h03821.jpg

Операция

Комментарий

++

Постфиксный или префиксный

инкремент (а++ соответствует а = а + 1)

--

Постфиксный или префиксный

декремент

->*

Указатель на ссылку

->

Указатель

0

Операция вызова функции

[]

Индексная операция


В табл. 16.1 приведен список стандартных значений операций, которые допускают перегрузку. Классы не требуют обязательной перегрузки операций, но перегрузка может сделать работу с классами более удобной. Этим,

однако, не ограничивается сфера применения ключевого слова operator. *

Совет

Операция присваивания ^ должна быть функцией-членом класса. Более подробно эта важная оператор-функция освещена в главе 17. Неправильно определенная оператор-функция присваивания может привести к утечкам памяти в ваших программах.

Чтобы пытаться перегружать операции, следует четко представлять себе свойственные им особенности. Сюда входят количество аргументов, их типы, и результат. В качестве хорошего упражнения можно порекомендовать написать короткую программу, в которой можно было бы попробовать каждую операцию в действии.

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

Пример 1. В этом разделе демонстрируется простой пример перегрузки операций. Мы перегрузим операцию сложения, а на ее примере рассмотрим синтаксис перегрузки и средства трассировки программ на C++. Пример предназначен исключительно для демонстрации неявной природы вызова оператор-функций; поэтому класс, представленный в листинге 16.1, может представлять интерес только в качестве учебного пособия.

h03822.jpg

1: // INT.CPP — Демонстрация простого случая перегрузки операций

2: ^include <iostream.h>

3: class INT