Funkcje znajomych w C++ i przypadek użycia z przykładami
Opublikowany: 2022-10-22Ukrywanie danych jest podstawową techniką tworzenia oprogramowania szeroko stosowaną w obiektowych językach programowania (OOP). Ogranicza dostęp do członków prywatnych danych spoza klasy. Jednak funkcja C++ znana jako funkcja friend jest sprzeczna z zasadą ukrywania danych.
W tym artykule dowiesz się, co to jest funkcja friend w C++ , co to jest klasa znajoma i poznasz kilka przypadków użycia na przykładach.
Sprawdź nasze bezpłatne kursy technologiczne, aby uzyskać przewagę nad konkurencją.
Co to jest funkcja przyjaciela w C++?
Funkcja zaprzyjaźniona w C++ jest funkcją zadeklarowaną poza klasą, ale ma dostęp do prywatnych i chronionych członków klasy. Chociaż prywatni członkowie określonej klasy są niedostępni dla funkcji niebędących członkami, zadeklarowanie ich jako funkcji zaprzyjaźnionych daje im dostęp do prywatnych i chronionych członków klas.
Sprawdź zaawansowaną certyfikację upGrad w DevOps
Charakterystyka funkcji przyjaciela
Funkcja przyjaciela w C++ ma następujące cechy:
- Funkcja zaprzyjaźniona jest poza zakresem klasy, której została zadeklarowana jako zaprzyjaźniona
- Funkcja zaprzyjaźniona może być członkiem klasy lub funkcją zadeklarowaną poza zakresem klasy
- Funkcjonalność znajomych nie ogranicza się do jednej klasy.
Poznaj nasze popularne kursy inżynierii oprogramowania
Master of Science in Computer Science z LJMU i IIITB | Program certyfikacji cyberbezpieczeństwa Caltech CTME |
Pełny Bootcamp rozwoju stosu | Program PG w Blockchain |
Program Executive PG w pełnym rozwoju stosu | |
Zobacz wszystkie nasze kursy poniżej | |
Kursy inżynierii oprogramowania |
- Wywołanie funkcji zaprzyjaźnionej jest jak wywołanie dowolnej normalnej funkcji klasy bez użycia obiektu
- Nie możemy wywołać funkcji friend za pomocą obiektu, ponieważ nie znajduje się on w zakresie klasy
- Zaprzyjaźnione funkcje w C++ mają obiekty jako argumenty
- Funkcję przyjaciela możemy zadeklarować w części prywatnej lub publicznej
- Nazwy członków nie są bezpośrednio dostępne dla funkcji przyjaciela i musi używać operatora członkostwa kropki i nazwy obiektu z nazwą członka
Sprawdź zaawansowaną certyfikację upGrad w zakresie cyberbezpieczeństwa
Składnia funkcji Friend
Aby zadeklarować funkcję friend, używamy słowa kluczowego friend wewnątrz ciała klasy. Składnia funkcji przyjaciela to:
klasa nazwa klasy {
… .. …
nazwa_zwrotu przyjaciela nazwa_funkcji(lista argumentów);
… .. …
}
Umiejętności tworzenia oprogramowania na żądanie
Kursy JavaScript | Podstawowe kursy języka Java | Kursy na temat Struktury danych |
Kursy Node.js | Kursy SQL | Kursy rozwoju pełnego stosu |
Kursy NFT | Kursy DevOps | Kursy Big Data |
Kursy React.js | Kursy na temat bezpieczeństwa cybernetycznego | Kursy na temat przetwarzania w chmurze |
Kursy projektowania baz danych | Kursy Pythona | Kursy kryptowalut |
Jeśli rozbijemy składnię, oto co oznacza każdy termin:
- friend to słowo kluczowe oznaczające, że funkcja jest funkcją zaprzyjaźnioną
- returnType jest typem zwracanym funkcji
- functionName to nazwa funkcji, która została zaprzyjaźniona z klasą
- lista argumentów to argumenty, które przekażemy
Ucz się kursów rozwoju oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Przykład funkcji zaprzyjaźnionej w C++
Przyjrzyjmy się teraz niektórym programom ilustrującym funkcję przyjaciela.
Przykład 1: funkcja zaprzyjaźniona w C++ wyświetlająca wysokość pudełka
#include <iostream>
używając standardowej przestrzeni nazw;
klasa Pudełko
{
prywatny:
int wysokość;
publiczny:
Pudełko(): wysokość(0) { }
przyjaciel int printHeight(Box); //funkcja przyjaciela
};
int printHeight (Pole h)
{
wys.wysokość += 40;
powrót h.wysokość;
}
int main()
{
Pudełko h;
cout<<“Wysokość pudełka: “<< printHeight(h)<<endl;
zwróć 0;
}
Przeczytaj nasze popularne artykuły związane z tworzeniem oprogramowania
Jak zaimplementować abstrakcję danych w Javie? | Co to jest klasa wewnętrzna w Javie? | Identyfikatory Java: definicja, składnia i przykłady |
Zrozumienie enkapsulacji w OOPS z przykładami | Wyjaśnienie argumentów wiersza poleceń w języku C | 10 najważniejszych funkcji i cech chmury obliczeniowej w 2022 r. |
Polimorfizm w Javie: pojęcia, typy, charakterystyka i przykłady | Pakiety w Javie i jak ich używać? | Git Tutorial dla początkujących: Naucz się Gita od podstaw |
Wyjście:
Wysokość pudełka: 40
Przykład 2: Gdy funkcja zaprzyjaźniona w C++ jest przyjazna dwóm klasom
#include <iostream>
używając standardowej przestrzeni nazw;
// prześlij deklarację
klasa Klasa Q;
klasa klasa P {
publiczny:
// konstruktor do inicjalizacji numP na 12
KlasaP() : numP(12) {}
prywatny:
int numP;
// deklaracja funkcji przyjaciela
przyjaciel int add(ClassP, ClassQ);
};
klasa KlasaQ {
publiczny:
// konstruktor do inicjalizacji numQ na 1
ClassQ() : numQ(1) {}
prywatny:
int numQ;
// deklaracja funkcji przyjaciela
przyjaciel int add(ClassP, ClassQ);
};
// dostęp do członków obu klas
int add(ClassP obiektP, ClassQ obiektQ) {
return (obiektP.numP + obiektQ.numQ);
}
int main() {
Klasa P obiektP;
ClassQ obiektQ;
cout << „Suma: ” << add(obiektP, obiektQ);
zwróć 0;
}
Wyjście:
Suma: 13
W powyższym przykładzie klasa P i klasa Q zadeklarowały add() jako funkcję zaprzyjaźnioną, dając jej dostęp do prywatnych danych obu klas. Co więcej, funkcja przyjaciela w klasie P używa klasy Q.
Dlatego w programie wykonujemy deklarację wyprzedzającą klasy Q.
Wdrażanie funkcji znajomych
Aby lepiej zrozumieć funkcję zaprzyjaźnioną w C++, przyjrzymy się teraz dwóm sposobom implementacji funkcji zaprzyjaźnionej.
- Implementacja funkcji zaprzyjaźnionej w C++ za pomocą metody innej klasy
Klasę zaprzyjaźnioną deklarujemy w C++, gdy potrzebujemy dostępu do prywatnych i chronionych członków innej klasy, w której została zadeklarowana jako zaprzyjaźniona. Możliwe jest również zadeklarowanie jako przyjaciela pojedynczej funkcji składowej innej klasy.
klasa nazwa_klasy
{
znajomy klasa znajomy_klasa;// deklarowanie znajomego klasy
};
klasa przyjaciel_klasa
{
};
W powyższej deklaracji friend class wszystkie funkcje w friend_class są funkcjami zaprzyjaźnionymi z class_name .
Oto prosty przykład ilustrujący implementację funkcji zaprzyjaźnionych za pomocą metody innej klasy:
#include <iostream>
używając standardowej przestrzeni nazw;
klasa A
{
int p=4;
przyjaciel klasa B; //klasa znajomych
};
klasa B
{
publiczny:
pusty wyświetlacz (A & A)
{
cout<<”Wartość p wynosi:” <<ap;
}
};
wew główna ()
{
A;
Bb;
- wyświetlacz (a);
zwróć 0;
}
Wyjście:
Wartość p wynosi:4
- Implementacja funkcji globalnej
Implementacja funkcji globalnego przyjaciela pozwala nam uzyskać dostęp do wszystkich chronionych i prywatnych członków globalnej deklaracji klasy. Oto przykład:
#include<iostream>
używając standardowej przestrzeni nazw;
przestrzeń klasowa
{
int;
intb;
int c;
publiczny:
void setdata (int x, int y, int z);
nieważne wyświetlanie (unieważnione);
przyjaciel void operator- (spacja i s);
};
pusta przestrzeń ::setdata (int x, int y, int z)
{
a=x; b=y; c=z;
}
pusta przestrzeń::wyświetlanie(pusta)
{
cout<<a<<” „<<b<<” „<<c<<„\n”;
}
void operator- (spacja i s)
{
sa =- sa;
sb =- sb;
sc =- sc;
}
wew główna ()
{
przestrzeń s;
- dane zadane (9,2,3);
Cout<<“s:”;
- wyświetlacz ();
-s;
Cout<<“-s:”;
- wyświetlacz ();
zwróć 0;
}
Wyjście:
s: 9 2 3
-s: -9 -2 -3
W powyższym przykładowym programie operator- jest funkcją zaprzyjaźnioną, którą zadeklarowaliśmy globalnie w zakresie klasy.
Czym jest klasa przyjaciela w C++?
Chociaż jest to już dość oczywiste, klasa przyjacielska to klasa, która ma dostęp zarówno do prywatnych, jak i chronionych członków klasy, w której została zadeklarowana jako przyjaciel.
Mówiąc prościej, klasa zaprzyjaźniona w C++ jest używana, gdy chcemy, aby klasa miała dostęp do prywatnych i chronionych elementów członkowskich innej klasy.
Funkcje składowe klasy, które deklarujemy jako zaprzyjaźnione z inną klasą, są funkcjami zaprzyjaźnionymi z klasą zaprzyjaźnioną. W ten sposób funkcje przyjaciela łączą obie klasy.
Składnia klasy Friend
Oto składnia klasy przyjaciela w C++:
klasa R; //prześlij deklarację
klasa P{
// Inne deklaracje
klasa przyjaciół R;
};
klasa R{
// Deklaracje
};
Na powyższej ilustracji klasa R jest przyjacielem klasy P. W rezultacie klasa R może uzyskać dostęp do danych prywatnych należących do klasy P. Jednak nie jest to prawdą, a klasa P nie może uzyskać dostępu do danych prywatnych należących do klasy R. .
Ponadto deklaracja przekazania jest podawana w celu poinformowania kompilatora o istnieniu jednostki, zanim zostanie ona kategorycznie zdefiniowana. Tutaj deklarujemy klasę R za pomocą deklaracji forward, aby powiadomić kompilator o jej istnieniu. Deklaracja forward pozwala nam używać obiektów klasy R w klasie P.
Jaki jest pożytek z funkcji friend w C++?
Podsumowując naszą dyskusję, spójrzmy na dwa podstawowe zastosowania funkcji friend w C++:
- Po pierwsze, używamy funkcji friend, gdy chcemy uzyskać dostęp do prywatnych i chronionych członków klasy. Aby to zrobić, zazwyczaj wymagamy, aby obiekty tej klasy miały dostęp do prywatnych i chronionych elementów członkowskich. Jednak funkcja zaprzyjaźniona eliminuje sytuację, w której funkcja musi być członkiem klasy, aby uzyskać dostęp.
- Innym zastosowaniem funkcji friend w C++ jest przeciążanie operatorów. Funkcje o tej samej nazwie, ale z różnymi liczbami i argumentami są nazywane funkcjami przeciążającymi. Funkcje zaprzyjaźnione w C++ znajdują zastosowanie w przeciążaniu operatorów.
W tym przypadku funkcja przeciążająca operator poprzedza słowo kluczowe friend i deklaruje zakres klasy funkcji. W przypadku przeciążenia przez funkcję przyjaciela operatory binarne przyjmują dwa jawne argumenty, podczas gdy operatory jednoargumentowe przyjmują jeden argument. Działa tak samo, jak funkcja operatora binarnego, z tym wyjątkiem, że implementacja funkcji operatora zaprzyjaźnionego odbywa się poza zakresem klasy.
To prowadzi nas do końca naszej dyskusji o funkcji friend w C++ i jej zastosowaniach. Mam nadzieję, że pomoże ci to pogłębić wiedzę o C++.
Ponadto, jeśli chcesz rozpocząć karierę jako pełny programista, upGrad oferuje w pełni internetowy program podyplomowy dla kadry kierowniczej w tworzeniu oprogramowania – specjalizacja w rozwoju pełnego stosu przez 13 miesięcy we współpracy z IIIT Bangalore.
Najważniejsze punkty programu:
- Praktyczne zapoznanie się z odpowiednimi dla branży studiami przypadków i zadaniami
- 450+ godzin nauki 360 stopni
- 10+ najlepszych narzędzi i języków programowania
- Mentoring kariery 1:1 Sesje z mentorami branżowymi
- Wsparcie dla studentów 24/7
Zarejestruj się już dziś, aby uzyskać wyjątkowe korzyści upGrad już dziś!
Co to jest funkcja przyjaciela w C++?
Funkcja zaprzyjaźniona w C++ to funkcja, która nie jest członkiem klasy, ale ma dostęp do swoich prywatnych i chronionych elementów członkowskich.
Jak zadeklarować funkcję przyjaciela?
Funkcja przyjaciela ma dostęp do prywatnych i chronionych danych klasy. Aby zadeklarować funkcję friend, używamy słowa kluczowego friend wewnątrz ciała klasy.
Jak zaprzyjaźnić się z klasą w C++?
Używamy słowa kluczowego friend, aby zadeklarować klasę jako klasę zaprzyjaźnioną w C++. Słowo kluczowe umożliwia dowolnej klasie dostęp do prywatnych i chronionych członków innych klas i funkcji.