Функция друга - Friend function
В объектно-ориентированного программирования, а функция друга, то есть "друг" данного учебный класс, это функция, которая имеет такой же доступ, как и методы, к частным и защищенным данные.[1]
Дружественная функция объявляется классом, предоставляющим доступ, поэтому дружественные функции являются частью интерфейса класса, как и методы. Дружественные функции позволяют использовать объекты в альтернативном синтаксисе, например f (x)
вместо x.f ()
, или же г (х, у)
вместо x.g (y)
. Дружественные функции имеют такое же значение для инкапсуляция как методы.
Похожая концепция есть у класс друзей.
Сценарии использования
Этот подход может использоваться в дружественной функции, когда функции требуется доступ к частным данным в объектах из двух разных классов. Это может быть выполнено двумя аналогичными способами.
- функция глобального или пространство имен область видимости может быть объявлена другом обоих классов
- функция-член одного класса может быть объявлена другом другого класса.
#включают <iostream>с помощью пространство имен стандартное; учебный класс Фу; // Вперед объявление класса Foo, например, для компиляции.учебный класс Бар { частный: int а = 0; общественный: пустота Показать(Бар& Икс, Фу& у); друг пустота Показать(Бар& Икс, Фу& у); // объявление глобального друга}; учебный класс Фу { частный: int б = 6; общественный: друг пустота Показать(Бар& Икс, Фу& у); // объявление глобального друга друг пустота Бар::Показать(Бар& Икс, Фу& у); // объявление друга из другого класса }; // Определение функции-члена Bar; этот участник друг Fooпустота Бар::Показать(Бар& Икс, Фу& у) { cout << "Показать через функциональный член панели" << конец; cout << "Бар :: a =" << Икс.а << конец; cout << "Foo :: b =" << у.б << конец;} // Друг для Bar и Foo, определение глобальной функциипустота Показать(Бар& Икс, Фу& у) { cout << "Показать через глобальную функцию" << конец; cout << "Бар :: a =" << Икс.а << конец; cout << "Foo :: b =" << у.б << конец;} int главный() { Бар а; Фу б; Показать(а,б); а.Показать(а,б);}
Рекомендации
- ^ Хольцнер, Стивен (2001). C ++: Черная книга. Скоттсдейл, Аризона: Coriolis Group. п. 397. ISBN 1-57610-777-9.
Когда вы объявляете функцию другом класса, эта функция имеет доступ к внутренним элементам данных этого объекта (то есть его защищенным и закрытым членам данных).
внешняя ссылка
- Учебник по функциям друга в C ++ на CoderSource.net
- Руководство C ++ дружба и наследование на cplusplus.com