Funzioni amico in C++ e caso d'uso con esempi

Pubblicato: 2022-10-22

L'occultamento dei dati è una tecnica fondamentale di sviluppo software ampiamente utilizzata nei linguaggi di programmazione orientati agli oggetti (OOP). Limita l'accesso ai membri dei dati privati ​​dall'esterno della classe. Tuttavia, una funzionalità C++ nota come funzione friend va contro il principio di nascondere i dati.

In questo articolo imparerai cos'è la funzione friend in C++ , cos'è una classe friend ed esplorerai alcuni casi d'uso con esempi.

Dai un'occhiata ai nostri corsi di tecnologia gratuiti per avere un vantaggio sulla concorrenza.

Sommario

Qual è la funzione amico in C++?

Una funzione friend in C++ è una funzione dichiarata al di fuori di una classe ma ha accesso ai membri privati ​​e protetti della classe. Sebbene i membri privati ​​di una particolare classe siano inaccessibili alle funzioni non membri, dichiararli come funzioni amiche dà loro accesso ai membri privati ​​e protetti delle classi.

Dai un'occhiata alla certificazione avanzata di upGrad in DevOps

Caratteristiche della funzione amico

La funzione friend in C++ ha le seguenti caratteristiche:

  • La funzione amico è al di fuori dell'ambito della classe a cui è stata dichiarata amico
  • Una funzione friend può essere un membro di una classe o una funzione dichiarata al di fuori dell'ambito della classe
  • La funzionalità amico non è limitata a una singola classe.

Esplora i nostri corsi di ingegneria del software popolari

Master of Science in Informatica presso LJMU e IIITB Programma di certificazione di sicurezza informatica Caltech CME
Bootcamp di sviluppo full stack Programma PG in Blockchain
Programma Executive PG in Full Stack Development
Visualizza tutti i nostri corsi qui sotto
Corsi di ingegneria del software

  • Invocare una funzione amico è come invocare qualsiasi normale funzione della classe senza utilizzare l'oggetto
  • Non possiamo invocare la funzione friend usando l'oggetto poiché non è nell'ambito della classe
  • Le funzioni Friend in C++ hanno oggetti come argomenti
  • Possiamo dichiarare una funzione amico sia nella parte privata che pubblica
  • I nomi dei membri non sono direttamente accessibili a una funzione amico e deve utilizzare l'operatore di appartenenza del punto e il nome dell'oggetto con il nome del membro

Dai un'occhiata alla certificazione avanzata di upGrad in sicurezza informatica

Sintassi della funzione Friend

Per dichiarare la funzione friend, utilizziamo la parola chiave friend all'interno del corpo della classe. La sintassi della funzione amico è:

classe nomeclasse {

… .. …

amico returnType functionName(elenco arg);

… .. …

}

Competenze di sviluppo software richieste

Corsi JavaScript Corsi di base in Java Corsi sulle strutture dei dati
Node.js Corsi Corsi SQL Corsi di sviluppo full stack
Corsi NFT Corsi DevOps Corsi sui Big Data
Corsi React.js Corsi di sicurezza informatica Corsi di cloud computing
Corsi di progettazione di database Corsi di Python Corsi di criptovaluta

Se analizziamo la sintassi, ecco cosa significa ogni termine:

  • amico è la parola chiave che indica che la funzione è una funzione amico
  • returnType è il tipo restituito della funzione
  • functionName è il nome della funzione che è diventata amica della classe
  • arg list sono gli argomenti che passeremo

Impara i corsi di sviluppo software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Esempio di una funzione C++ Friend

Ora, diamo un'occhiata ad alcuni programmi per illustrare la funzione amico.

Esempio 1: funzione amico C++ per stampare l'altezza di una scatola

#includi <iostream>

usando lo spazio dei nomi std;

classe Box

{

privato:

altezza interna;

pubblico:

Box(): altezza(0) { }

amico int printHeight(Box); //funzione amico

};

int printHeight(Box h)

{

h.altezza += 40;

ritorno h.altezza;

}

int principale()

{

Casella h;

cout<<“Altezza della scatola: “<< printHeight(h)<<endl;

restituire 0;

}

Leggi i nostri articoli popolari relativi allo sviluppo software

Come implementare l'astrazione dei dati in Java? Che cos'è Inner Class in Java? Identificatori Java: definizione, sintassi ed esempi
Comprensione dell'incapsulamento in OOPS con esempi Spiegazione degli argomenti della riga di comando in C Le 10 principali caratteristiche e caratteristiche del cloud computing nel 2022
Polimorfismo in Java: concetti, tipi, caratteristiche ed esempi Pacchetti in Java e come usarli? Tutorial Git per principianti: impara Git da zero

Produzione:

Altezza scatola: 40

Esempio 2: quando la funzione amico di C++ è compatibile con due classi

#includi <iostream>

usando lo spazio dei nomi std;

// dichiarazione anticipata

classe ClassQ;

classe ClasseP {

pubblico:

// costruttore per inizializzare numP su 12

ClasseP() : numP(12) {}

privato:

int numP;

// dichiarazione della funzione amico

amico int add(ClassP, ClassQ);

};

classe ClassQ {

pubblico:

// costruttore per inizializzare numQ su 1

ClassQ() : numQ(1) {}

privato:

numero intQ;

// dichiarazione della funzione amico

amico int add(ClassP, ClassQ);

};

// accedi ai membri di entrambe le classi

int add(ClassP oggettoP, ClasseQ oggettoQ) {

ritorno (oggettoP.numP + oggettoQ.numQ);

}

int principale() {

oggettoP classeP;

ClasseQ oggettoQ;

cout << “Somma: ” << add(oggettoP, oggettoQ);

restituire 0;

}

Produzione:

Somma: 13

Nell'esempio sopra, la Classe P e la Classe Q hanno dichiarato add() come funzione friend, dandogli accesso ai dati privati ​​di entrambe le classi. Inoltre, la funzione friend all'interno della Classe P utilizza la Classe Q.

Quindi, facciamo una dichiarazione anticipata di Classe Q nel programma.

Implementazione di una funzione amico

Per avere un'idea migliore della funzione friend in C++, esamineremo ora i due modi in cui possiamo implementare la funzione friend.

  1. Implementazione di una funzione friend in C++ tramite un metodo di un'altra classe

Dichiariamo una classe amica in C++ quando abbiamo bisogno di accedere ai membri privati ​​e protetti di un'altra classe in cui è stata dichiarata amica. È anche possibile dichiarare come amico una singola funzione membro di un'altra classe.

classe nome_classe

{

classe di amici classe_amica;// dichiarazione di classe amica

};

classe amico_classe

{

};

Nella precedente dichiarazione di friend class, tutte le funzioni in friend_class sono le funzioni friend di class_name .

Ecco un semplice esempio per illustrare l'implementazione delle funzioni friend attraverso un metodo di un'altra classe:

#includi <iostream>

usando lo spazio dei nomi std;

classe A

{

int p=4;

amico di classe B; //classe di amici

};

classe B

{

pubblico:

visualizzazione nulla (A&a)

{

cout<<”Il valore di p è:” <<ap;

}

};

int principale ()

{

Aa;

Bb;

  1. visualizzazione (a);

restituire 0;

}

Produzione:

Il valore di p è:4

  1. Implementazione di una funzione globale

L'implementazione di una funzione di amicizia globale ci consente di accedere a tutti i membri protetti e privati ​​della dichiarazione di classe globale. Ecco un esempio:

#includi<iostream>

usando lo spazio dei nomi std;

spazio di classe

{

int a;

int b;

int c;

pubblico:

void setdata (int x, int y, int z);

visualizzazione vuota (vuota);

amico operatore vuoto- (spazio & s);

};

spazio vuoto ::setdata (int x, int y, int z)

{

a=x; b=y; c=z;

}

spazio vuoto::display(vuoto)

{

cout<<a<<” “<<b<<” “<<c<<“\n”;

}

operatore vuoto- (spazio & s)

{

sa =- sa;

qb =- qb;

mb =- mb;

}

int principale ()

{

spazio s;

  1. dati impostati (9,2,3);

cout<<“s:”;

  1. Schermo ();

-S;

cout<<“-s:”;

  1. Schermo ();

restituire 0;

}

Produzione:

s: 9 2 3

-s: -9 -2 -3

Nel programma di esempio sopra, operator- è ​​la funzione friend che abbiamo dichiarato globalmente nell'ambito della classe.

Che cos'è la classe degli amici in C++?

Sebbene sia ormai abbastanza evidente, una classe amica è una classe che ha accesso sia ai membri privati ​​che a quelli protetti della classe in cui è dichiarata amica.

In termini semplici, una classe amico in C++ viene utilizzata quando si desidera che una classe abbia accesso ai membri privati ​​e protetti di un'altra classe.

Le funzioni membro della classe che dichiariamo come amica di un'altra classe sono funzioni amico della classe amica. Pertanto, le funzioni amico collegano entrambe le classi.

Sintassi della classe amica

Ecco la sintassi di una classe di amici in C++:

classe R; //dichiarazione anticipata

classe P{

// Altre dichiarazioni

classe amico R;

};

classe R{

// Dichiarazioni

};

Nell'illustrazione sopra, la Classe R è amica della Classe P. Di conseguenza, la Classe R può accedere ai membri dei dati privati ​​della Classe P. Tuttavia, non è vero il contrario e la Classe P non può accedere ai membri dei dati privati ​​della Classe R .

Inoltre, la dichiarazione anticipata viene fornita per informare il compilatore dell'esistenza di un'entità prima che venga definita categoricamente. Qui dichiariamo la Classe R usando la dichiarazione in avanti per notificare al compilatore la sua esistenza. La dichiarazione forward ci consente di utilizzare gli oggetti di Classe R in Classe P.

Qual è l'uso della funzione amico in C++?

Riassumendo la nostra discussione, diamo un'occhiata ai due usi principali della funzione friend in C++:

  • In primo luogo, utilizziamo la funzione amico quando vogliamo accedere ai membri privati ​​e protetti di una classe. Per fare ciò, generalmente richiediamo agli oggetti di quella classe di accedere ai membri privati ​​e protetti. Tuttavia, la funzione amico elimina la situazione in cui la funzione deve essere un membro della classe per ottenere l'accesso.
  • Un altro uso della funzione friend in C++ è l'overloading degli operatori. Le funzioni con lo stesso nome ma numeri e argomenti diversi sono note come funzioni di sovraccarico. Le funzioni Friend in C++ trovano impiego nell'overloading degli operatori.

In questo caso, la funzione di sovraccarico dell'operatore precede la parola chiave friend e dichiara un ambito di classe di funzione. Quando sovraccaricati dalla funzione friend, gli operatori binari accettano due argomenti espliciti mentre gli operatori unari accettano un argomento. Funziona allo stesso modo di una funzione di operatore binario, tranne per il fatto che l'implementazione della funzione di operatore amico avviene al di fuori dell'ambito della classe.

Questo ci porta alla fine della nostra discussione sulla funzione friend in C++ e sui suoi usi. Spero che questo ti aiuti a migliorare la tua conoscenza di C++.

Inoltre, se stai cercando di avviare la tua carriera come sviluppatore full-stack, upGrad offre un programma post-laurea completamente online in sviluppo software - specializzazione in sviluppo full stack di 13 mesi in collaborazione con IIIT Bangalore.

Punti salienti del programma:

  • Esposizione pratica a casi di studio e incarichi rilevanti per il settore
  • Oltre 450 ore di apprendimento a 360 gradi
  • 10+ migliori strumenti di programmazione e linguaggi
  • Sessioni di tutoraggio professionale 1:1 con mentori del settore
  • Supporto agli studenti 24 ore su 24, 7 giorni su 7

Iscriviti oggi per ottenere i vantaggi esclusivi di upGrad oggi stesso!

Qual è la funzione amico in C++?

Una funzione friend in C++ è una funzione che non è un membro di una classe ma ha accesso ai suoi membri privati ​​e protetti.

Come si dichiara una funzione amico?

Una funzione amico ha accesso ai dati privati ​​e protetti di una classe. Per dichiarare una funzione friend, utilizziamo la parola chiave friend all'interno del corpo della classe.

Come si crea un amico di classe in C++?

Usiamo la parola chiave friend per dichiarare una classe come classe amica in C++. La parola chiave consente a qualsiasi classe di accedere a membri privati ​​e protetti di altre classi e funzioni.