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

[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
m →‎Zobacz też: zmiana w kategorii
m zmiana kolejnosci i poprawka w linku
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]].
 
===Właściwości===
===Przykład w języku [[c plus plus|C++]]===
* 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 [[Dziedziczenie (programowanie obiektowe)|dziedziczona]].
* 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 może być przyjacielem wielu klas.
* Funkcja zaprzyjaźniona może być zarówno funkcją globalną, jak i funkcją składową innej klasy.
* 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.).
 
===Przykład w języku [[c plus plus|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:
 
Linia 14 ⟶ 22:
obiekt.x = 12; // nie byłoby możliwe to przypisanie bez określenia przyjaźni
}
 
===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 [[Dziedziczenie (programowanie obiektowe)|dziedziczona]].
* 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 może być przyjacielem wielu klas.
* Funkcja zaprzyjaźniona może być zarówno funkcją globalną, jak i funkcją składową innej klasy.
* 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.).
 
===Zobacz też===