Реферат: Объективное программирование

// выхода из main()

}

3.3 Ограничение доступа к объектам класса. Дружественность.

----------------------------------------------------------

Выше было дано формальное определение класса. Содержательная его сторона состоит в том, что класс выступает в Си++ как определенный программистом тип данных. Такой тип данных включает в себя:

- описание структуры объектов класса. Объект класса представляет собой совокупность элементов (структуру), каждый из которых является переменной некоторого типа или объектом ранее определенного класса;

- описание множества допустимых операций над объектом класса, которые представлены элементами-функциями;

- описание процедур создания и уничтожения объекта класса (конструктор и деструктор).

При этом внутренняя структура объектов (описанная в "приватной" части класса) доступна только элементам-функциям. Наоборот, "публичная" часть определения класса - это описание той части объекта, к которой возможен доступ из любого места программы, если доступен сам объект. Данное ограничение позволяет исключить некорректное использование объектов класса, как случайное, так и умышленное. Возможные ошибки, связанные с неправильным "поведением" объектов класса, локализуются таким образом в определении самого класса, а не в использовании его объектов.

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

Объявление дружественной функции предствляет собой прототип функции, объявление переопределяемой операции или имя класса, которым разрешается доступ, с ключевым словом friend впереди. Общая схема объявления такова:

class A

{

int x; // Приватная часть класса

...

friend class B; // Функции класса B дружественны классу A

// (имеют доступ к приватной части A)

friend void C::fun(A&);

// Элемент-функция fun класса C имеет

// доступ к приватной части A

friend void xxx(A&,int);

// Функция xxx дружественна классу A

friend void C::operator+(А&);

// Переопределяемая в классе C операция

// <объект C>+<объект A> дружественна

// классу A

class B

{

public: int fun1(A&);// Необходим доступ к приватной части A

К-во Просмотров: 555
Бесплатно скачать Реферат: Объективное программирование