« Что бы сказал эксперт по ООП ... » Это в основном зависит от того, насколько он опытен в C ++, что - по своей собственной спецификации - не является (и не хочет быть) языком для пуриста.
ООП зилоты не используют С ++ (они предпочитают Smalltalk и любят Java).
Зелоты функционального программирования не используют C ++ (они предпочитают LISP и его наследников)
Большинству экспертов ООП не нравятся функции друзей просто потому, что они хотят, чтобы ООП-часть C ++ вела себя как Smalltalk. Но C ++ - это не Smalltalk, и они даже не могут понять, что друг не нарушает инкапсуляцию , по той простой причине, что функция не может быть другом вашего класса без вашего класса .
И с точки зрения «функциональности», между a.fn(b)
и fn(a,b)
нет никакой разницы (где fn
друг): вовлеченные стороны одинаковы. Проще говоря, один синтаксис может быть более подходящим, чем другой: если fn является коммутативным относительно a
и b
, fn(a,b)
вероятно, более подходящим, чем тогда a.fn(b)
(где взгляды имеют «особую роль», которой на самом деле это не так).