Funkcja zaprzyjaźniona
rodzaj funkcji w programowaniu
Funkcja zaprzyjaźniona – funkcja, która ma dostęp do prywatnych składników klasy.
Właściwości
edytuj- 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++
edytujDana 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;
}