Funkcja zaprzyjaźniona

Funkcja zaprzyjaźniona – funkcja, która ma dostęp do prywatnych składników klasy.

WłaściwościEdytuj

  • 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.
  • Funkcją zaprzyjaźnioną może być zarówno funkcja globalna, jak i funkcja składowa innej klasy.
  • Funkcja zaprzyjaźniona nie jest składnikiem klasy, która deklaruje przyjaźń.

Przykład w C++Edytuj

Dana jest klasa K, funkcja void fun( K& ) która modyfikuje prywatny składnik x obiektu klasy K, oraz klasa 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 jednoznacznie określić którym przez dodanie słowa friend na początku definicji funkcji:

 class K {
   //poprzez domniemanie jest private: 
   friend void fun( K& ); // deklaracja przyjaźni
   friend void Y::fun( K& ); // deklaracja przyjaźni funkcji składowej klasy 'Y'
   int x;
 };

 void fun( K& obiekt ) {
   obiekt.x = 12; // nie byłoby możliwe to przypisanie bez określenia przyjaźni
   cout << obiekt.x;
 }

Zobacz teżEdytuj