Funkcja zaprzyjaźniona
Z Wikipedii
Funkcja zaprzyjaźniona - w języku programowania C++ funkcja, która ma dostęp do prywatnych składników klasy.
[edytuj] Właściwości
- Nie jest ważne w którym miejscu klasy (private, protected, public) zostanie przyjaźń zadeklarowana. Przyjaźnie danej klasy są stosunkowo ważne z punktu widzenia projektanta stąd też deklaracje przyjaźni zaleca się deklarować na samym początku deklaracji klasy.
- Przyjaźń nie jest dziedziczona.
- Gdy istnieje wiele przeciążonych funkcji, funkcją zaprzyjaźnioną klasy jest tylko ta funkcja, która ma zgodną listę argumentów z zadeklarowaną funkcją zaprzyjaźnioną.
- Funkcja może być przyjacielem wielu klas.
- Funkcja zaprzyjaźniona może być zarówno funkcją globalną, jak i funkcją składową innej klasy.
- Funkcja zaprzyjaźniona nie jest składnikiem klasy, która deklaruje przyjaźń.
[edytuj] Przykład w C++
Mamy klasę K, funkcję void fun( K& ) która modyfikuje prywatny składnik x obiektu klasy K, oraz klasę Y która ma funkcję składową void Y::fun( K& ) która również modyfikuje prywatny składnik x obiektu klasy K (brak definicji klasy Y, dla prostoty przykładu). Aby funkcje te mogły modyfikować prywatny składnik x, można go oznaczyć jako publiczny(public), ale wtedy składnik x mogłaby modyfikować każda inna funkcja. Aby zatem pozwolić modyfikować składnik x tylko wybranej/wybranym funkcjom należy to określić którym:
class K { friend void fun( K& ); // deklaracja przyjaźni friend void Y::fun( K& ); // deklaracja przyjaźni funkcji składowej klasy 'Y' private: int x; }; void fun( K& obiekt ) { obiekt.x = 12; // nie byłoby możliwe to przypisanie bez określenia przyjaźni }