Funkcja zaprzyjaźniona
Funkcja zaprzyjaźniona to rodzaj funkcji, która ma dostęp do prywatnych składników klasy. Poniżej przedstawione są kluczowe właściwości tej funkcji.
Właściwości funkcji zaprzyjaźnionej
- Przyjaźń może być zadeklarowana w dowolnym miejscu klasy i jest istotna z perspektywy projektanta. Zaleca się umieszczanie deklaracji przyjaźni na początku definicji klasy.
- Przyjaźń nie jest dziedziczona przez klasy pochodne.
- W przypadku wielu przeciążonych funkcji, tylko ta, która ma zgodną listę argumentów, może być uznana za funkcję zaprzyjaźnioną.
- Funkcja zaprzyjaźniona może być przyjacielem wielu klas.
- Może być zarówno funkcją globalną, jak i funkcją składową innej klasy.
- Nie jest składnikiem klasy, która deklaruje przyjaźń.
Przykład w C++
Rozważmy następujący przykład:
Klasa K zawiera prywatny składnik x i dwie funkcje: jedną globalną void fun(K&) oraz funkcję składową void Y::fun(K&) z klasy Y. Obie funkcje mają za zadanie modyfikować składnik x.
Aby umożliwić im dostęp do prywatnego składnika, należy zadeklarować je jako przyjaciół klasy K poprzez użycie słowa kluczowego friend:
class K {
// domyślnie składnik jest private:
friend void fun(K&); // deklaracja przyjaźni
friend void Y::fun(K&); // deklaracja przyjaźni dla funkcji składowej klasy 'Y’
int x;
};
void fun(K& obiekt) {
obiekt.x = 12; // przypisanie możliwe dzięki deklaracji przyjaźni
cout << obiekt.x;
}
Bez deklaracji przyjaźni, modyfikacja prywatnego składnika x byłaby niedozwolona. Dzięki temu mechanizmowi można precyzyjnie kontrolować dostęp do prywatnych elementów klasy.