Функции друзей могут получить доступ к закрытым и защищенным членам других классов.
Означает, что они могут быть использованы для доступа ко всем данным, будь то частные или публичные.
Таким образом, дружественные функции используются для доступа к тем данным, которые статические методы не могут.
Эти методы становятся статичными, которые вызываются так много раз, что объявляют разные места внутри каждого объекта, поскольку они становятся слишком дорогостоящими (с точки зрения памяти).
Это можно сделать с помощью примера:
Пусть имя класса является фактом, а его членом данных является n (которое представляет собой целое число, факториал которого имеет значение)
тогда в этом случае объявление find_factorial () как статического было бы мудрым решением !!
Они используются в качестве функций обратного вызова.
манипулировать членами класса
чтобы получить постоянные данные, которые вы не хотите перечислять в заголовочном файле
Теперь у нас возникли следующие вопросы ..
Когда используется функция друга? Когда используется статическая функция?
Теперь, если оба варианта являются жизнеспособными вариантами решения проблемы,
Мы можем взвесить их пригодность с точки зрения доступности (доступности личных данных) и эффективности памяти.
По умолчанию никто не может быть предпочтительным, так как существует много ситуаций, когда нам нужно лучшее управление памятью, а иногда мы обеспокоены объемом данных.
Например:
foo :: create () предпочтительнее create_foo (), когда мы должны вызывать метод create () после каждого небольшого момента времени, и нас не интересует объем данных (личные данные)
И если нам интересно получить конфиденциальную информацию более чем одного класса (классов), то create_foo () будет предпочтительнее, чем foo :: create ().
Надеюсь, это поможет вам !!