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 используется вместе с оператор-функциями, то необходимо учитывать следующее:
• Число аргументов равно порядку операции.
• Функции не члены данного класса становятся друзьями класса.