Zalecane, 2019

Wybór Redakcji

Różnica między funkcją przyjaciela a klasą przyjaciela

Funkcja Przyjaciel i klasa znajomego to techniki używane do uzyskiwania dostępu do prywatnych członków klasy za pomocą słowa kluczowego przyjaciel. Zwykła różnica między funkcją przyjaciela a klasą przyjaciela polega na tym, że gdy używana jest funkcja znajomego, dostęp do prywatnych członków klasy można uzyskać tylko w klasie przyjaciela, dostęp do niej mają tylko nazwy klasy przyjaciół, a nie prywatni członkowie klasy.

Funkcja przyjaciela, używana przez funkcję lub klasę, może wywierać negatywny wpływ na obiektową strukturę ramową, ponieważ osłabia enkapsulację, która jest sprzeczna z obiektowym paradygmatem. To jest powód, dla którego funkcja znajomego musi być używana mądrze, inaczej mogłaby złamać ukrywanie danych w kodzie.

Ta funkcja znajomego nie jest ani przemienna, ani przechodnia . X jest przyjacielem Y nie wnioskuje, że Y jest także przyjacielem X. Jeśli X jest przyjacielem Y, a Y jest przyjacielem Z, nie sugeruje, że X jest przyjacielem Z.

Wykres porównania

Podstawa do porównaniaFunkcja znajomegoKlasa przyjaciół
PodstawowyJest to funkcja używana ze słowem kluczowym friend, która przyznaje dostęp do funkcji prywatnych członkom klasy.Jest to klasa używana ze słowem kluczowym friend, aby uzyskać dostęp do prywatnych członków innej klasy.
Deklaracja forwardMusi być użyte.Nie jest obowiązkowe.
Posługiwać sięFunkcja przyjaciela może być użyta w sytuacji przeciążenia operatora.Klasa przyjaciela może być używana, gdy klasa jest tworzona na szczycie innej klasy.

Definicja funkcji znajomego

Funkcja przyjaciela jest używana do uzyskiwania dostępu do prywatnych i chronionych członków klasy, umożliwiając dostęp funkcji nie będącej członkiem. W tym typie funkcji słowo znajomego jest używane przed nazwą funkcji w momencie deklaracji. Istnieją pewne restrykcyjne warunki stosowane do funkcji znajomego. Pierwszym warunkiem jest to, że funkcja przyjaciela nie jest dziedziczona przez klasę potomną. Drugi warunek jest taki, że specyfikator klasy pamięci może nie występować w funkcji przyjaciel, co oznacza, że ​​nie może być zadeklarowany jako statyczny i zewnętrzny.

Funkcja przyjaciół nie jest wywoływana z obiektem wywołującym klasy. Przykładami funkcji przyjaciół są: funkcja globalna, funkcja składowa klasy, szablon funkcji może być funkcją przyjaźni. Rozumiem to za pomocą przykładu.

 #include using namespace std; class first {int data; public: first (int i): dane (i) {} friend void display (const first i a); }; void display (const first & a) {cout << "data =" < 

Definicja klasy przyjaciół

Podobnie do funkcji znajomego możemy uczynić jedną klasę przyjacielem innej klasy, która jest określana jako klasa przyjaciół . Aby klasa przyjaciół mogła uzyskać dostęp do prywatnych członków zdefiniowanych w ramach drugiej klasy. Należy pamiętać, że klasa przyjaciela może uzyskać dostęp tylko do nazw zdefiniowanych w ramach drugiej klasy zamiast dziedziczyć inną klasę. Dokładniej, członkowie pierwszej klasy nie mogą stać się członkami klasy przyjaciół. Te klasy znajomych są rzadko używane.

Klasa przyjaciela może być zadeklarowana w więcej niż jednej klasie. Jest on uważany za krótką alternatywną metodę dla funkcji przyjaciel, ponieważ dzięki temu możemy stworzyć klasę przyjaciół, która ma dostęp do wszystkich elementów danych i funkcjonuje zamiast tworzyć wiele funkcji znajomych.

 #include using namespace std; class First {// Declare friend friend class class Second; public: First (): a (0) {} void print () {cout << "Wynikiem jest" << a << endl; } private: int a; }; class Second {public: void change (Pierwsza i yclass, int x) {yclass.a = x; }}; int main () // Wynik Wynik: 0 Wynik to 5 

Kluczowe różnice między funkcją znajomego a klasą przyjaciela

  1. Funkcja Friend jest funkcją, która ma dostęp do prywatnych i chronionych członków klasy. Natomiast klasa przyjaciela jest klasą, która pomaga w dostępie do prywatnych członków klasy.
  2. Funkcja przyjaciela jest zadeklarowana przez włączenie jej prototypu do klasy, odstąpienie jej od słowa kluczowego przyjaciel. Podobnie, klasa przyjaciela jest również zdefiniowana za pomocą znajomego słowa kluczowego.
  3. Deklaracja forward używana jest w przypadku funkcji friend, ponieważ nie jest konieczne używanie jej w klasie friend.

Wniosek

Funkcja przyjaciela jest wymagana, gdy funkcja potrzebuje dostępu do dwóch lub więcej niezależnych klas, wewnętrznych członków. Z drugiej strony, klasa przyjaciela jest potrzebna, gdy klasa wymaga dostępu do członków innej klasy. Gdy funkcja wielu członków musi być przyjacielem tej funkcji, w takim przypadku lepiej jest użyć klasy przyjaciół.

Top