" Що б сказав експерт ООС ... " В основному це залежить від того, наскільки він досвідчений на C ++, що - за його власними специфікаціями - не є (і не хоче бути) мовою для пуриста.
OOP Zealots не використовують C ++ (вони віддають перевагу Smalltalk і люблять Java).
У функціональному програмуванні зеленики не використовують C ++ (вони віддають перевагу LISP та його наступникам)
Більшість експертів OOP не люблять функцію друзів просто тому, що вони хочуть, щоб частина OOP C ++ поводилася як Smalltalk. Але C ++ не є Smalltalk, і вони навіть не можуть зрозуміти, що друг не порушує інкапсуляцію , з тієї простої причини, що функція не може бути другом вашого класу, якщо ваш клас цього не хоче .
І з точки зору "функціональності", між a.fn(b)
і fn(a,b)
немає різниці (де fn
друг): залучені сторони однакові. Просто один синтаксис може бути більш підходящим, ніж інший: якщо fn є комутативним відносно a
і b
, fn(a,b)
ймовірно , є більш підходящим тоді a.fn(b)
(де погляд має "особливу роль", що, власне, він не робить.)