Глава 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