Funkcja przyjaciela
W programowaniu obiektowym funkcja zaprzyjaźniona , czyli „przyjaciel” danej klasy , jest funkcją, która ma taki sam dostęp jak metody do danych prywatnych i chronionych .
Funkcja zaprzyjaźniona jest deklarowana przez klasę, która przyznaje dostęp, więc funkcje zaprzyjaźnione są częścią interfejsu klasy, podobnie jak metody. Funkcje zaprzyjaźnione pozwalają alternatywnej składni używać obiektów, na przykład f(x)
zamiast xf()
lub g(x,y)
zamiast xg(y)
. Funkcje zaprzyjaźnione mają taki sam wpływ na enkapsulację jak metody.
Podobną koncepcją jest klasa przyjaciół .
Przypadków użycia
Podejście to można zastosować w funkcji przyjaznej, gdy funkcja potrzebuje dostępu do danych prywatnych w obiektach z dwóch różnych klas. Można to osiągnąć na dwa podobne sposoby
- funkcja o zasięgu globalnym lub przestrzeni nazw może być zadeklarowana jako przyjaciel obu klas
- funkcja składowa jednej klasy może być zadeklarowana jako przyjaciel innej.
0
#include <iostream> używając przestrzeni nazw std ; klasa Foo ; // Deklaracja przekazania klasy Foo w celu np. kompilacji. klasa Słupek { prywatny : int a = ; public : void show ( Bar & x , Foo & y ); pokaz nieważnych znajomych ( Bar & x , Foo & y ); // deklaracja globalnego przyjaciela }; klasa Foo { prywatna : int b = 6 ; publiczne : pokaz nieważnych znajomych ( Bar & x , Foo & y ); // deklaracja przyjaciela globalnego przyjaciela void Bar ::show ( Bar & x , Foo & y ); // deklaracja znajomego z innej klasy }; // Definicja funkcji składowej Bar; ten członek jest znajomym Foo void Bar::show ( Bar & x , Foo & y ) { cout << "Pokaż przez członka funkcji Bar" << endl ; cout << "Słupek::a = " << x . a << koniec ; cout << "Foo::b = " << y . b << koniec ; } // Znajomy dla Bar i Foo, definicja funkcji globalnej void show ( Bar & x , Foo & y ) { cout << "Pokaż przez funkcję globalną" << endl ; cout << "Słupek::a = " << x . a << koniec ; cout << "Foo::b = " << y . b << koniec ; } int main () { Pasek a ; Foo b ; pokaż ( a , b ); za . pokaż ( a , b ); }
Linki zewnętrzne
- Samouczek dotyczący funkcji znajomego języka C++ na stronie CoderSource.net
- Samouczek dotyczący przyjaźni i dziedziczenia języka C++ na stronie cplusplus.com