ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн

Ломая стены

Надо отметить, что идея дружественных функций несколько сомнительна. Во вре-

мя разработки C++ на эту тему велись споры и приводились аргументы против

включения в язык такой возможности. С одной стороны, дружественные функции

повышают гибкость языка, но, с другой стороны, они не соответствуют принципу

ограничения доступа к данным, который гласит, что только функции-члены могут

иметь доступ к скрытым данным класса.

Насколько серьезно противоречит единству концепции использование друже-

ственных функций? Дружественная функция объявляется таковой в том классе,

к данным которого она захочет впоследствии получить доступ. Таким образом,

программист, не имеющий доступа к исходному коду класса, не может сде-

лать функцию дружественной. В этом смысле целостность данных сохраняется.

 

Но все равно такие функции принципиально нечистоплотны и потенциально

могут привести к «spaghetti-code» (код со слишком большим числом передач

управления), когда множество дружественных функций фактически стирают

границы между классами. По этой причине дружественные функции должны

быть по крайней мере разбросаны по программе и встречаться как можно реже.

Если вы обнаружили, что используете слишком много этих функций, стоит по-

думать об изменении программы.

 

14