Funkcje znajomych w C++ i przypadek użycia z przykładami

Opublikowany: 2022-10-22

Ukrywanie 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ą.

Spis treści

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.

  1. 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;

  1. wyświetlacz (a);

zwróć 0;

}

Wyjście:

Wartość p wynosi:4

  1. 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;

  1. dane zadane (9,2,3);

Cout<<“s:”;

  1. wyświetlacz ();

-s;

Cout<<“-s:”;

  1. 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.