Задать вопрос
@frilix
Иногда "творю"

Преимущество дружественных функций?

Здравствуйте , препод задал вопрос , когда предпочтительнее использовать дружественные функции вместо м тола класса , если они могут быть описаны и дружественной функцией и методом . варианты : наследование , не получает указателя this , быстрота отпадают . я не представляю ответ . в интернете не гуглится , может кто-то по опытнее поможет ?
  • Вопрос задан
  • 1336 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@monah_tuk
Когда нужно обеспечить некий доступ к внутрянке, при этом не выставляя её полностью наружу. Функция же может быть определена пользователем. Тем самым мы можем несколько повлиять на логику класса, не изменяя его интерфейсов и не вмешиваясь в бинарный код. Где такое может пригодиться? На вскидку:
1. Юнит-тестирование
2. При определении операторов (особенно всяких сложений, вычитаний)
3. Собственно, изменение, в определённых пределах, поведения класса без наследования (но можно получить палкой, когда внутренняя структура поменяется).

Но вообще, как это не гуглится? Гуглится!

1. www.cprogramming.com/tutorial/friends.html последний абзац:
friend and Encapsulation
Some people believe that the idea of having friend classes violates the principle of encapsulation because it means that one class can get at the internals of another. One way to think about this, however, is that friend is simply part of a class's overall interface that it shows the world. Just like an elevator repairman has access to a different interface than an elevator rider, some classes or functions require expanded access to the internals of another class. Moreover, using friend allows a class to present a more restrictive interface to the outside world by hiding more details than may be needed by anything but the friends of the class.

Finally, friends are particularly common in cases of operator overloading because it is often necessary for an overloaded operator to have access to the internals of the classes that are arguments to the operator.


2. www.cplusplus.com/doc/tutorial/inheritance
Typical use cases of friend functions are operations that are conducted between two different classes accessing private or protected members of both.


3. stackoverflow.com/questions/17434/when-should-you-...

В остальном, если что-то можно сделать без френдов - сделайте без них.
Ответ написан
egor_nullptr
@egor_nullptr
Перегрузка операторов

Бесплатный совет: почитайте Страуструпа.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы