Funkcja zaprzyjaźniona: Różnice pomiędzy wersjami

[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
m +linki
rozwinięte hasło - mam nadzieję, że trafnie
Linia 1:
'''Funkcja zaprzyjaźniona''' - w [[język programowania|językach programowania]] [[c plus plus|C++]], [[c sharp|C#]] itp. funkcja, która ma dostęp do prywatnych składników [[klasa (programowanie obiektowe)|klasy]].
 
A oto przykład w języku 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:
Zobacz też: [[podprogram]], [[procedura]].
<pre>
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
}
</pre>
 
Właściwości
* nie jest ważne w którym miejscu klasy (private, protected, public) zostanie przyjaźń zadeklarowana,
* należy pamiętać, że '''funkcja zaprzyjaźniona''' nie jest składnikiem klasy, stąd też nie ma wskaźnika ''this'' (w języku C++ itp.),
* funkcja może być przyjacielem wielu klas,
* gdy istnieje wiele pzeładowanych funkcji, '''funkcją zaprzyjaźnioną''' klasy jest tylko ta funkcja, która ma zgodną listę argumentów z zadeklarowaną '''funkcją zaprzyjaźnioną'''
* funkcja zaprzyjaźniona może być zarówno funkcją globalną, jak i funkcją składową innej klasy,
* przyjaźń nie jest [[dziedziczenie w programowaniu obiektowym|dziedziczona]].
 
Zobacz też: [[podprogram]], [[procedura]], [[klasa zaprzyjaźniona]].
 
[[kategoria:programowanie]]
[[kategoria:języki programowania]]
 
{{stub}}