400 " _ ____Часть lit. Современное программирование на C++ не будет работать, потому что strien определена как

size_t strien ( const char*);

Однако, определив операцию преобразования const char* (), мы сделаем возможным автоматическое преобразование

int len strien (s);

в эквивалентную форму

int len•= strien ( s.operator const char* О);

удовлетворяющую требованиям функции strien (она описана в string.h).

Применим эту идею к нашему классу DIRLIST из главы 14: класс нуждается в чем-то, что могло бы служить условием окончания цикла. Прекрасно подходят целочисленные значения; а поскольку у нас есть целая переменная done, то преобразование

operator int () ;

работает в лучшем виде.

Совет

Определяйте операции преобразования как функции-члены. Задача операции преобразования — вернуть объект типа Y там, где ожидается объект типа Y, но реально присутствует объект типа х. Обычно она возвращает данные-члены объекта.

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

Оператор-функция является дружественной, если ее объявление в классе содержит ключевое слово friend. Как следует из главы 14, друзья класса имеют доступ к закрытым элементам класса. Члены класса и так его имеют, значит определение члена другом не добавляет ничего нового. Спецификатор friend используется только для не членов данного класса, чтобы предоставить им доступ к закрытым частям класса.

Элементы, объявленные в закрытой части класса, недоступны не членам, но спецификатор friend отменяет действие спецификатора private. Это делается в тех редких случаях, когда элементы должны быть закрытыми, но удобно или необходимо предоставить доступ к ним некоторым не членам класса.

Если ключевое слово friend используется вместе с оператор-функциями, то необходимо учитывать следующее:

• Число аргументов равно порядку операции.

• Функции не члены данного класса становятся друзьями класса.