friend functions c
Dowiedz się więcej o funkcjach znajomych w C ++ z przykładami.
C ++ obsługuje funkcję hermetyzacji, w której dane są pakowane razem z działającymi na nich funkcjami, tworząc pojedynczą jednostkę. Robiąc to, C ++ zapewnia, że dane są dostępne tylko dla funkcji na nich działających, a nie dla nikogo spoza klasy.
Jest to jedna z wyróżniających cech C ++, która zachowuje dane i zapobiega ich wyciekowi do świata zewnętrznego.
=> Przeczytaj serię szkoleń Easy C ++.
Ale w niektórych aplikacjach czasu rzeczywistego czasami możemy chcieć uzyskać dostęp do danych poza dołączoną jednostką. Na przykład klasa outsider może chcieć uzyskać dostęp do prywatnych i chronionych danych klasy C ++.
C ++ zapewnia możliwość dostępu do prywatnych i chronionych danych za pomocą specjalnej funkcji zwanej funkcją lub klasą „znajomego”, którą omówimy tutaj w tym samouczku.
Czego się nauczysz:
- Funkcja znajomego w C ++
- Przykład funkcji znajomego
- Klasa przyjaciół
- Zalety / wady funkcji znajomego
- Wniosek
- rekomendowane lektury
Funkcja znajomego w C ++
Funkcja znajomego w C ++ to funkcja poprzedzona słowem kluczowym „przyjaciel”. Gdy funkcja jest zadeklarowana jako przyjaciel, może uzyskać dostęp do prywatnych i chronionych danych członków klasy.
Funkcja znajomego jest zadeklarowana wewnątrz klasy ze słowem kluczowym friend, który poprzedza, jak pokazano poniżej.
class className{ …… friend returnType functionName(arg list); };
Jak pokazano powyżej, funkcja zaprzyjaźniona jest zadeklarowana wewnątrz klasy, której prywatne i chronione elementy członkowskie mają być dostępne. Funkcję można zdefiniować w dowolnym miejscu pliku kodu i nie musimy używać słowa kluczowego friend ani operatora rozpoznawania zakresu.
Podczas wdrażania funkcji znajomych w naszym programie należy pamiętać o kilku kwestiach:
- Funkcja znajomego może być zadeklarowana w prywatnej lub publicznej sekcji klasy.
- Można ją wywołać jak normalną funkcję bez użycia obiektu.
- Funkcja znajomego nie należy do zakresu klasy, której jest przyjacielem.
- Funkcja zaprzyjaźniona nie jest wywoływana przy użyciu obiektu klasy, ponieważ nie znajduje się w zakresie tej klasy.
- Funkcja znajomego nie może uzyskać bezpośredniego dostępu do prywatnych i chronionych danych członków klasy. Musi skorzystać z obiektu klasy, a następnie uzyskać dostęp do elementów członkowskich za pomocą operatora kropki.
- Funkcja zaprzyjaźniona może być funkcją globalną lub członkiem innej klasy.
Przykład funkcji znajomego
Zaimplementujmy przykład programowania, aby lepiej zrozumieć użycie funkcji znajomego.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< Wynik:
Powierzchnia = 150
W powyższym programie mamy przykładową klasę z długością i szerokością elementów prywatnych. Mamy konstruktora publicznego, który inicjalizuje wartości length i width. Następnie mamy zaprzyjaźnioną funkcję „calcArea”, która oblicza powierzchnię biorąc pod uwagę długość i szerokość.
Zauważ, że calcArea jest funkcją znajomego i nie jest częścią klasy. W funkcji głównej po utworzeniu obiektu klasy sample przekazujemy go do funkcji calcArea, która oblicza pole powierzchni i wyświetla wartość.
Klasa przyjaciół
Podobnie jak funkcje znajomych, możemy również mieć klasę znajomych. Klasa znajomego może uzyskać dostęp do prywatnych i chronionych członków klasy, z którą jest znajomym.
class A{ …… friend class B; }; class B{ …….. };
Jak pokazano powyżej, klasa B jest przyjacielem klasy A. Tak więc klasa B może uzyskać dostęp do prywatnych i chronionych członków klasy A.
Nie oznacza to jednak, że klasa A ma dostęp do prywatnych i chronionych członków klasy B. Zauważ, że przyjaźń nie jest wzajemna, chyba że tak zrobimy.
Podobnie, przyjaźń klasowa nie jest dziedziczona. Oznacza to, że skoro klasa B jest przyjacielem klasy A, nie będzie przyjacielem podklas klasy A.
Weźmy przykład programowania, aby zademonstrować klasę znajomego.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< Wynik:
Powierzchnia = 150
narzędzia do monitorowania systemu dla systemu Windows 10
W tym programie mamy dwie klasy. Klasa „Powierzchnia”, która oblicza powierzchnię przy użyciu parametrów długości i szerokości. Zauważ, że wszystkie pola, obszar, długość i szerokość są prywatnymi członkami klasy Area.
Następną używaną klasą jest „printClass”, która drukuje powierzchnię obliczoną przez funkcję calcArea w klasie Area. Ponieważ członkowie są prywatni, musimy uczynić printClass przyjacielem klasy Area.
Gdy to zrobimy, w funkcji main tworzymy obiekt klasy Area, obliczamy powierzchnię i przekazujemy obiekt do funkcji printArea klasy printClass w celu wyświetlenia powierzchni.
Zalety / wady funkcji znajomego
Jedną z zalet funkcji lub klasy znajomego jest to, że możemy uzyskać dostęp do prywatnych i chronionych danych klasy. Na przykład, jeśli implementujemy listę połączoną, możemy uczynić z tej klasy listę znajomych klasy węzłów i uzyskać dostęp do jej danych, ponieważ lista połączona składa się z węzłów.
Zatem w określonej sytuacji użycie funkcji lub klasy zaprzyjaźnionej może okazać się korzystne. Jednak ma też pewne wady.
Jedną z wyróżniających cech C ++ jest hermetyzacja, tj. Grupowanie danych i funkcji działających na tych danych razem, tak aby żadna zewnętrzna funkcja lub klasa nie miała dostępu do danych. Ale zezwalając funkcjom lub klasie zaprzyjaźnionej na dostęp do prywatnych członków innej klasy, w rzeczywistości naruszamy funkcję hermetyzacji.
Aby temu zapobiec, powinniśmy uważać przy używaniu funkcji zaprzyjaźnionych lub klas. Powinniśmy upewnić się, że nie powinniśmy używać w naszym programie zbyt wielu funkcji i klas zaprzyjaźnionych, które całkowicie narażą na szwank hermetyzację.
Wniosek
Na tym kończy się nasz samouczek dotyczący funkcji i klas znajomego w C ++.
Czytelnicy muszą być bardzo ostrożni podczas korzystania z klas i funkcji zaprzyjaźnionych, tak jakby to działało jako dobrodziejstwo dla programisty, należy również używać ich ostrożnie, ponieważ nadmierne użycie funkcji i klas zaprzyjaźnionych może naruszyć funkcję OOP hermetyzacji w naszym programie.
W naszym nadchodzącym samouczku szczegółowo dowiemy się o funkcjach statycznych w języku C ++.
=> Odwiedź tutaj, aby nauczyć się C ++ od podstaw.
rekomendowane lektury