Доступ к дружественным функциям, определенным внутри класса
При работе с дружественными функциями важно понимать, как они определяются и как осуществляется доступ к ним. Поскольку дружественные функции не являются членами класса, доступ к ним за пределами класса может потребовать особого внимания.
В предоставленном фрагменте кода:
class A {
public:
friend void fun(A a){std::cout Дружественные функции fun() и fun3() определены внутри класса, но не объявлены в глобальной области видимости. Хотя доступ к fun() можно получить напрямую с помощью аргументно-зависимого поиска (ADL) из-за аргумента типа A, доступ к fun2() невозможен без объявления в глобальной области видимости.
Для правильного доступа к fun2() , она должна быть объявлена глобально в дополнение к определению как дружественной функции внутри класса:
class A {
public:
friend void fun(A a){std::cout В этой модифицированной версии доступ к fun2() можно получить вне класса как к обычной функции.
Однако рекомендуется определять дружественные функции обычным способом, вне класса, но объявляя в друзьях:
class A {
friend void fun(A a);
friend void fun2();
friend void fun3();
};
void fun(A a) { std::cout Этот подход гарантирует, что все дружественные функции определены и объявлены правильно, что делает их доступными и пригодными для использования по назначению.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3