Язык программирования C++

Объявление friend


Предположим, мы хотим в дополнение к интерфейсу класса String создать функцию, которая формирует новую строку, являющуюся результатом слияния двух строк, но не изменяет сами аргументы. (Особенно часто подобный интерфейс необходимо создавать при определении операций – см. ниже). Для того чтобы эта функция работала быстро, желательно, чтобы она имела доступ к внутренним атрибутам класса String. Доступ можно разрешить, объявив функцию "другом" класса String с помощью ключевого слова friend:

class String { . . . friend String concat(const String s1, const String s2); };

Тогда функция concat может быть реализована следующим образом:

String concat(const String s1, const String s2) { String result; result.length = s1.length + s2.length; result.str = new char[result.length + 1]; if (result.str == 0) { // обработка ошибки } strcpy(result.str, s1.str); strcat(result.str, s2.str); return result; }

С помощью механизма friend можно разрешить обращение к внутренним элементам класса как отдельной функции, отдельному методу другого класса или всем методам другого класса:

class String { // все методы класса StringParser обладают // правом доступа ко всем атрибутам класса // String friend class StringParser; // из класса Lexer только метод CharCounter // может обращаться к внутренним атрибутам // String friend int Lexer::CharCounter(const String s, char c); };

Конечно, злоупотреблять механизмом friend не следует. Каждое решение по использованию friend должно быть продумано. Если только одному методу какого-либо класса действительно необходим доступ, не следует объявлять весь класс как friend.

on_load_lecture()

Дальше



Если Вы заметили ошибку - сообщите нам.
Страницы:

|

/p>

|

/p>

|

/p>

|

вопросы |

|

учебники

|

для печати и PDA

Курсы | Учебные программы | Учебники | Новости | Форум | Помощь



Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru

2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование



Содержание раздела