C++ Operasovraccarico con esempi

โšก Riepilogo intelligente

Operasovraccarico tor in C++ Consente di ridefinire il funzionamento degli operatori predefiniti come + e == con le proprie classi e oggetti. Qui imparerai la sintassi, gli approcci, quali operatori possono essere sovraccaricati e le regole da seguire.

  • โž• Che cosa รจ: OperaL'overloading di tor ridefinisce operatori come + per le proprie classi.
  • โœ๏ธ Sintassi: Definisci una funzione chiamata operator seguita dal simbolo, come operator+.
  • ๐Ÿ”€ Approcci: รˆ possibile sovraccaricare gli operatori come funzioni membro o funzioni friend.
  • ๐Ÿšซ limiti: Alcuni operatori, come ::, . e ?:, non possono essere sovraccaricati.
  • ๐Ÿค– Aiuto tramite intelligenza artificiale: Strumenti di intelligenza artificiale come GitHub Copilot scrivono istantaneamente funzioni di sovraccarico dell'operatore.

C++ Operasovraccarico

Cosa รจ Operasovraccarico?

utilizzando sovraccarico dell'operatore in C++, puoi specificare piรน di un significato per un operatore in un ambito. Lo scopo del sovraccarico dell'operatore รจ quello di fornire un significato speciale di un operatore per un tipo di dati definito dall'utente.

Con l'aiuto del sovraccarico dell'operatore, รจ possibile ridefinire la maggior parte degli C++ operatori. Puoi anche usare l'overloading degli operatori per eseguire diverse operazioni usando un operatore.

Sintassi

Sovraccaricare a C++ operatore, dovresti definire una funzione speciale all'interno della classe come segue:

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

Ecco una spiegazione per la sintassi di cui sopra:

  • return_type รจ il tipo restituito per la funzione.
  • Successivamente, menzioni la parola chiave operator.
  • Il simbolo indica il simbolo dell'operatore da sovraccaricare. Ad esempio, +, -, <, ++.
  • Gli argomenti possono essere passati alla funzione dell'operatore allo stesso modo delle funzioni.

esempio 1

#include <iostream>
using namespace std;
class TestClass {
private:
	int count;
public:
	TestClass() : count(5) {}
	void operator --() {
		count = count - 3;
	}
	void Display() { 

		cout << "Count: " << count; }
};

int main() {
	TestClass tc;
	--tc;
	tc.Display();
	return 0;
}

Produzione:

 Operasovraccarico

Ecco uno screenshot del codice:

 Operasovraccarico

Code Spiegazione:

  1. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includi lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata TestClass.
  4. Utilizza il modificatore di accesso privato, che contrassegna un membro della classe come accessibile privatamente.
  5. Crea un conteggio di variabili intere. Questa variabile sarร  accessibile privatamente.
  6. Utilizza il modificatore di accesso pubblico, che contrassegna un membro della classe come accessibile privatamente.
  7. Utilizzare un costruttore di classi per inizializzare la variabile contatore su 5.
  8. Sovraccaricare il significato dell'operatore โ€”.
  9. L'operatore decrementerร  il valore della variabile x di 1.
  10. Fine della sezione di sovraccarico dell'operatore. All'operatore รจ stato dato un nuovo nome.
  11. Definizione di una funzione denominata funzione Display().
  12. Stampa il valore del conteggio delle variabili insieme ad altro testo sulla console quando viene chiamata la funzione Display(). Il } segna la fine del corpo della funzione Display().
  13. Fine del corpo della classe.
  14. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta all'interno di questa funzione.
  15. Crea un'istanza della classe TestClass e dagli il nome tc.
  16. Questo chiamerร  la funzione void operator โ€“().
  17. Utilizzare la posizione della classe TestClass per chiamare la funzione Display().
  18. La funzione deve restituire valore in caso di completamento positivo.
  19. Fine del corpo della funzione main().

Approcci diversi a Operator Sovraccarico in C++

รˆ possibile eseguire il sovraccarico dell'operatore implementando uno qualsiasi dei seguenti tipi di funzioni:

  1. Funzione membro
  2. Funzione non membro
  3. Funzione amico
  • La funzione di sovraccarico dell'operatore puรฒ essere una funzione membro quando un operando Left รจ un oggetto della Classe.
  • Quando l'operando di sinistra รจ diverso, il Operator la funzione di sovraccarico dovrebbe essere una funzione non membro.

รˆ possibile rendere la funzione di sovraccarico dell'operatore una funzione amico se ha bisogno di accedere ai membri della classe privata e protetta.

Puรฒ tutto C++ Operai tori sono sovraccarichi?

No, ci sono C++ operatori che non possono essere sovraccaricati.

Essi comprendono:

  • :: -Operatore di risoluzione dell'ambito
  • ?: -operatore ternario.
  • . -selettore dei membri
  • Operatore dimensione
  • * -selettore del puntatore membro

Cose da ricordare

  1. Con l'overloading degli operatori, puoi ridefinire il modo in cui un operatore funziona solo per i tipi definiti dall'utente (oggetti, strutture). Non รจ possibile utilizzarlo per i tipi incorporati (float, char, int, ecc.).
  2. Il = e & C++ operatori sono sovraccaricati per impostazione predefinita. Ad esempio, puoi copiare gli oggetti della stessa Classe direttamente usando l'operatore =.
  3. Operator precedence non cambia l'associativitร  e la precedenza degli operatori. Tuttavia, puoi cambiare l'ordine di valutazione usando le parentesi.
  4. Ci sono quattro operatori che non รจ possibile sovraccaricare C++Includono l'operatore di risoluzione dell'ambito (::), l'operatore di selezione dei membri (.), l'operatore di selezione dei membri tramite un puntatore alla funzione (.*) e l'operatore ternario (?:).

Regole per Operasovraccarico

Ecco le regole per Operasovraccarico:

  • Perchรฉ funzioni, almeno un operando deve essere un oggetto di classe definito dall'utente.
  • Puoi sovraccaricare solo gli operatori esistenti. Non รจ possibile sovraccaricare nuovi operatori.
  • Alcuni operatori non possono essere sovraccaricati utilizzando una funzione amico. Tuttavia, tali operatori possono essere sovraccaricati utilizzando la funzione membro.

Come sovraccaricare Operator

esempio 1

#include <iostream>   
using namespace std;
class OperatorOverload {
private:
	int x;

public:
	OperatorOverload() : x(10) {}
	void operator ++() {
		x = x + 2;
	}
	void Print() {
		cout << "The Count is: " << x;
		}
};
int main() {
	OperatorOverload ov;
	++ov;   
	ov.Print();
	return 0;
}

Produzione:

Sovraccarico Operaesempio

Ecco uno screenshot del codice:

Sovraccarico Operaesempio

Code Spiegazione:

  1. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includi lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata OperatorOverload.
  4. Utilizza il modificatore di accesso privato, che contrassegna un membro della classe come accessibile privatamente.
  5. Crea una variabile intera x. Questa variabile sarร  accessibile privatamente.
  6. Utilizza il modificatore di accesso pubblico, che contrassegna un membro della classe come accessibile privatamente.
  7. Utilizzare un costruttore di classi per inizializzare la variabile x su 10.
  8. Sovraccarica il significato dell'operatore ++.
  9. L'operatore incrementerร  il valore della variabile x con 2.
  10. Fine della sezione di sovraccarico dell'operatore. All'operatore รจ stato dato un nuovo nome.
  11. Chiamando la funzione Print().
  12. Stampa il valore della variabile x insieme ad altro testo sulla console quando viene chiamata la funzione Print().
  13. Fine del corpo della funzione Print().
  14. Fine del corpo della classe.
  15. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta all'interno di questa funzione.
  16. Crea un'istanza di OperatorOverload Classe denominata ov.
  17. Questo chiamerร  la funzione void operator ++().
  18. Utilizzare la posizione di OperatorOverload per chiamare la funzione Print().
  19. La funzione deve restituire valore in caso di completamento positivo.
  20. Fine del corpo della funzione main().

esempio 2

#include<iostream> 
using namespace std;

class TestClass {
private:
	int real, over;
public:
	TestClass(int rl = 0, int ov = 0) {
		real = rl;
		over = ov;
	}

	TestClass operator + (TestClass const &obj) {
		TestClass result;
		result.real = real + obj.real;
		result.over = over + obj.over;
		return result;
	}
	void print() {
		cout << real << " + i" << over << endl;
	}
};
int main()
{
	TestClass c1(9, 5), c2(4, 3);
	TestClass c3 = c1 + c2;
	c3.print();
}

Produzione:

Sovraccarico Operaesempio

Ecco uno screenshot del codice:

Sovraccarico Operaesempio

Code Spiegazione:

  1. Includere il file header iostream nel nostro programma per poter utilizzare le sue funzioni.
  2. Includi lo spazio dei nomi std nel nostro programma per poter utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata TestClass. Il { segna l'inizio del corpo della classe.
  4. Utilizzare il modificatore di accesso privato per contrassegnare le variabili come private, il che significa che รจ possibile accedervi solo dall'interno della Classe.
  5. Definire due variabili intere, reale e superiore.
  6. Utilizza il modificatore di accesso pubblico per contrassegnare il costruttore come pubblico, il che significa che sarร  accessibile anche all'esterno della Classe.
  7. Creazione del costruttore della classe e inizializzazione del file variabili.
  8. Inizializza il valore della variabile real.
  9. Inizializza il valore della variabile sopra.
  10. Fine del corpo del costruttore.
  11. Sostituisci il significato dell'operatore +.
  12. Creare il risultato del tipo di dati di tipo TestClass.
  13. Usa l'operatore + con numeri complessi. Questa riga aggiungerร  la parte reale di un numero alla parte reale di un altro numero.
  14. Usa l'operatore + con numeri complessi. Questa riga aggiungerร  la parte immaginaria di un numero alla parte immaginaria di un altro numero.
  15. Il programma restituirร  il valore della variabile result dopo l'esecuzione riuscita.
  16. Fine della definizione del nuovo significato dell'operatore +, cioรจ sovraccarico.
  17. Chiama il metodo print().
  18. Stampa il nuovo numero complesso dopo l'addizione sulla console.
  19. Fine del corpo della funzione print().
  20. Fine del corpo della classe TestClass.
  21. Chiamando la funzione main().
  22. Passando i valori delle parti reali e complesse da sommare. La prima parte di c1 verrร  sommata alla prima parte di c2, ovvero 9+4. La seconda parte di c1 verrร  sommata alla seconda parte di c, ovvero 5+3.
  23. Esecuzione di un'operazione utilizzando l'operatore sovraccaricato + e memorizzazione del risultato nella variabile c3.
  24. Stampa del valore della variabile c3 sulla console.
  25. Fine del corpo della funzione main().

DOMANDE FREQUENTI

OperaL'overloading di tor consente di ridefinire il modo in cui gli operatori predefiniti, come + o ==, interagiscono con gli oggetti delle proprie classi, in modo che si comportino in modo naturale per i tipi di dati personalizzati.

Definisci una funzione speciale il cui nome รจ la parola chiave operator seguita dal simbolo, ad esempio operator+. Essa accetta gli operandi come parametri e restituisce il risultato.

Esistono due approcci principali: sovraccaricare un operatore come funzione membro della classe, oppure come funzione friend che puรฒ accedere ai membri privati โ€‹โ€‹della classe.

La maggior parte degli operatori puรฒ essere sovraccaricata, ma alcuni no, tra cui gli operatori di risoluzione dell'ambito (::), di accesso ai membri (.), di puntatore ai membri (.*) e ternario (?:).

รˆ possibile sovraccaricare solo gli operatori esistenti, almeno un operando deve essere di un tipo definito dall'utente e non รจ possibile modificare la precedenza, l'associativitร  o il numero di operandi di un operatore.

Gli assistenti basati sull'intelligenza artificiale come GitHub Copilot generano funzioni di overload per gli operatori delle tue classi, scelgono tra funzioni membro e funzioni friend e aggiungono i tipi di ritorno corretti mentre digiti.

Sรฌ. Gli strumenti basati sull'intelligenza artificiale generano operatori sovraccaricati come + e ==, seguono le regole standard e segnalano gli operatori che non possono essere sovraccaricati, risparmiando tempo ed errori.

OperaL'overloading di tor semplifica l'utilizzo e la lettura delle classi, consentendo agli oggetti di interagire con operatori familiari, come ad esempio la somma di due vettori con l'operatore + anzichรฉ con una funzione specifica.

Riassumi questo post con: