«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как получить доступ к дружественным функциям, определенным внутри класса?

Как получить доступ к дружественным функциям, определенным внутри класса?

Опубликовано 25 ноября 2024 г.
Просматривать:623

How to Access Friend Functions Defined Within a Class?

Доступ к дружественным функциям, определенным внутри класса

При работе с дружественными функциями важно понимать, как они определяются и как осуществляется доступ к ним. Поскольку дружественные функции не являются членами класса, доступ к ним за пределами класса может потребовать особого внимания.

В предоставленном фрагменте кода:

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