Глава 16. Перегрузка операций 391

h03911.jpg

Знак операции Назначение

Операция доступа к элементу класса

# * Операция доступа к указателю

: : Операция разрешения области видимости

?: Трехместная условная операция

sizeof Размер объекта (sizeof(x)/sizeof (х[0])) возвращает число элементов в массиве х

# Препроцессорное преобразование строк; а также предшествует директивам препроцессора include, define, endif и т. п.

## Препроцессорная конкатенация строк

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

Выше мы рассмотрели, какие операции могут быть перегружены, а какие не могут. Существуют и другие типы функций, использующие ключевое слово operator — это операции преобразования типов. Операции преобразования (conversion operators) позволяют преобразовать объект одного типа в объект другого типа.

Рассмотрим тривиальный класс INT из предыдущего примера. Предположим, что вместо перегрузки operators- вы определили операцию преобразования int по следующему алгоритму. Если требуется int, а используется INT, то вернуть элемент int класса INT.

То есть

INT а (5) , Ь(6) ;

INT с = а + Ь;

будет похоже на

INT с;

с.data = a.data + b.data;

Вы можете возразить, что того же эффекта можно достичь, объявив элемент data открытым; но это только на первый взгляд. В действительности (считая, что преобразование из INT в int уже определено) имеет место следующее:

INT с = a.operator intО + Ь.operator int О;

Разница в том, что сделав свои данные открытыми (public), вы утрачиваете контроль над ними. Любой пользователь имеет к ним доступ, что нарушает