Тема 7.2. Дружественные функции

Инкапсуляция, как принцип объектно-ориентированного программирования, требует, чтобы компонентные данные (поля класса) были недоступны для прямого изменения в функциях, которые не являются частью класса.

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

Чаще всего такие функции создаются для выполнения специальных операций над объектами двух разных классов. Более подробно об этом будет сказано в следующих темах данной лабораторной работы, при описании перегрузки различных операторов для классов. А сейчас рассмотрим простой пример использования дружественных функций.

Пусть требуется создать некоторое двумерное поле, по которому перемещается несколько объектов. Возникает задача обнаружения столкновения объектов со стенками поля. Не всегда можно ясно определить в каком классе следует реализовывать метод обнаружения столкновения со стенкой. Ниже она реализоввана в виде дружественной функции к классу TBody

Результат выполнения показан на последнем рисунке. Красным отмечены точки, в которых у объект меняется знак соответствующей компоненыт скорости.

Определение класса TField


Определение класса TBody


Функция, дружественная к классу TBody


Текст основной функции приложения


Результат работы программы