#c #friend-class
#c #friend-class
Вопрос:
Класс friend может получить доступ к членам класса, содержащего функцию friend . Является ли его наоборот, т.Е. Класс также может получить доступ к членам своего класса друзей, истинным?
Комментарии:
1. Нет. Это сделало бы модификаторы доступа бессмысленными, поскольку вы могли бы просто сделать себя другом класса.
2. Вы могли бы написать несколько строк кода, чтобы проверить это самостоятельно.
3. @Gaurav «Я хочу спросить, почему они отметили это как отрицательное?» Вероятно, показаны крайне низкие исследовательские усилия.
4. @Gaurav: наведите курсор на кнопку downvote
5. @RyanHaining: переменные типа
std::any<T>
для некоторыхT
, конечно!
Ответ №1:
Является ли его наоборот, т.Е. Класс также может получить доступ к членам своего класса друзей, истинным?
Нет, они не могут. friend
Ключевое слово является однонаправленным.
Чтобы обеспечить friend
функциональность двунаправленным способом, вы должны указать оба класса friend
друг для друга. На самом деле для этого требуется прямое объявление хотя бы одного из этих классов-кандидатов:
class B; // Forward declare
class A {
friend class B;
};
class B {
friend class A;
};
Комментарии:
1. Итак, это верно только во взаимной дружбе?
2. @Gaurav Что вы имеете в виду под взаимной дружбой ? Объявление as
friend
с обеих сторон?3. да, как класс A {друг класса B; }; класс B {друг класса A; }; Извините. Я не могу правильно это определить
4. @Gaurav Для этого требуется прямое объявление (по крайней мере
class B;
), без этого вы попадаете в циклическое .5. Можете ли вы уточнить или предоставить ссылку. Я всего лишь новичок.