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

7: // list++ вызывает постфиксный operator++

// для объекта list класса DIRLIST 8: for( DIRLIST list; list; list++) 9: cout « list « endl;

10:}

Любая программа, которой потребуется получить список файлов каталога, может включить заголовочный файл dirlist.h и извлечь этот список ценой всего лишь двух строк.

Двухместные операции

Двухместные (бинарные) перегруженные операции требуют двух объектов. Первый объект — это левый операнд, а второй, соответственно, правый. Если бинарная оператор-функция определена как член класса, то левым операндом будет объект, определяемый указателем this, а правый будет передаваться как аргумент. Если операция определена как глобальная функция, подобно operator« класса ostream, тогда оба объекта передаются оператор-функции по ссылке. Первый объект будет левым аргументом, а второй — правым.

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

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

Синтаксис операции преобразования:

operator data_type ();

где data_type — это тип объекта (включая базовые типы), в который вы хотите преобразовать объект другого типа.

Рассмотрим, например, строковый класс STRING. Существует изобилие функций обработки строк, работающих с объектами типа char* (строки в стиле С). К сожалению, эти функции не принимают объекты класса STRING. Однако можно определить операцию преобразования

operator const char*(); // возвращает const char*

возвращающую в том контексте, где ожидается char*, соответствующую часть объекта типа STRING.

Без операции преобразования фрагмент

STRING s ("Hello, World!");

int len = strlen(s); // s — строка STRING