Sovraccarico di operatori C ++ con esempi

Sommario:

Anonim

Che cos'è il sovraccarico dell'operatore?

Utilizzando l'overloading degli operatori in C ++, è possibile specificare più di un significato per un operatore in un ambito. Lo scopo del sovraccarico dell'operatore è fornire un significato speciale di un operatore per un tipo di dati definito dall'utente.

Con l'aiuto dell'overloading degli operatori, puoi ridefinire la maggior parte degli operatori C ++. È inoltre possibile utilizzare l'overloading dell'operatore per eseguire diverse operazioni utilizzando un operatore.

In questo tutorial C ++ imparerai:

  • Che cos'è il sovraccarico dell'operatore?
  • Sintassi
  • Diversi approcci al sovraccarico degli operatori in C ++
  • Tutti gli operatori C ++ possono essere sovraccaricati?
  • Cose da ricordare:
  • Regole per il sovraccarico dell'operatore:
  • Come sovraccaricare l'operatore:

Sintassi

Per sovraccaricare un operatore C ++, è necessario definire una funzione speciale all'interno della classe come segue:

class class_name{… publicreturn_type operator symbol (argument(s)){… }… };

Ecco una spiegazione per la sintassi precedente:

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

Esempio 1:

#include 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:

Ecco uno screenshot del codice:

Spiegazione del codice:

  1. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includere 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 numero intero di variabili. Questa variabile sarà accessibile privatamente.
  6. Usa il modificatore di accesso pubblico, che contrassegna un membro della classe come accessibile privatamente.
  7. Utilizzare un costruttore di classi per inizializzare il contatore delle variabili su 5.
  8. Sovraccaricare il significato dell'operatore -.
  9. L'operatore decrementerà il valore della variabile x di 1.
  10. Fine della sezione relativa al sovraccarico dell'operatore. All'operatore è stato assegnato un nuovo nome.
  11. Definizione di una funzione denominata Display () function.
  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 assegnagli 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 un valore in caso di completamento corretto.
  19. Fine del corpo della funzione main ().

Diversi approcci al sovraccarico degli operatori in C ++

È possibile eseguire l'overloading degli operatori implementando uno dei seguenti tipi di funzioni:

  1. Funzione membro
  2. Funzione non membro
  3. Funzione amico
  • La funzione di overload dell'operatore può essere una funzione membro quando un operando Left è un oggetto della classe.
  • Quando l'operando Left è diverso, la funzione di overload dell'operatore 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.

Tutti gli operatori C ++ possono essere sovraccaricati?

No. Ci sono operatori C ++ che non possono essere sovraccaricati.

Loro includono:

  • :: -Operatore di risoluzione dell'ambito
  • ?: -operatore alternativo.
  • . -membro selettore
  • Dimensioni dell'operatore
  • * -member selettore del puntatore

Cose da ricordare:

  1. Con l'overloading degli operatori, è possibile ridefinire il modo in cui un operatore funziona solo per i tipi definiti dall'utente (oggetti, strutture). Non puoi usarlo per i tipi predefiniti (float, char, int, ecc.).
  2. Gli operatori = e & C ++ sono sovraccaricati per impostazione predefinita. Ad esempio, puoi copiare gli oggetti della stessa Classe direttamente utilizzando l'operatore =.
  3. La precedenza degli operatori non modifica l'associatività e la precedenza degli operatori. Tuttavia, è possibile modificare l'ordine di valutazione utilizzando le parentesi.
  4. Ci sono quattro operatori che non puoi sovraccaricare in C ++. Includono l'operatore di risoluzione dell'ambito (: :), l'operatore di selezione dei membri (.), La selezione dei membri tramite un puntatore all'operatore di funzione (. *) E l'operatore ternario (? :).

Regole per il sovraccarico dell'operatore:

Ecco le regole per il sovraccarico dell'operatore:

  • Perché funzioni, almeno un operando deve essere un oggetto classe definito dall'utente.
  • Puoi solo sovraccaricare gli operatori esistenti. Non puoi 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 l'operatore:

Esempio 1:

#include 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:

Ecco uno screenshot del codice:

Spiegazione del codice:

  1. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includere 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. Usa il modificatore di accesso pubblico, che contrassegna un membro della classe come accessibile privatamente.
  7. Usa un costruttore di classi per inizializzare la variabile x a 10.
  8. Sovraccaricare il significato dell'operatore ++.
  9. L'operatore incrementerà il valore della variabile x con 2.
  10. Fine della sezione relativa al sovraccarico dell'operatore. All'operatore è stato assegnato un nuovo nome.
  11. Chiamare 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 della classe OperatorOverload denominata ov.
  17. Questo chiamerà la funzione void operator ++ ().
  18. Utilizzare la posizione della classe OperatorOverload per chiamare la funzione Print ().
  19. La funzione deve restituire un valore in caso di completamento corretto.
  20. Fine del corpo della funzione main ().

Esempio 2:

#includeusing 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:

Ecco uno screenshot del codice:

Spiegazione del codice:

  1. Includere il file di intestazione iostream nel nostro programma per poter utilizzare le sue funzioni.
  2. Includere lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata TestClass. La {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. Definisci due variabili intere, reale e superiore.
  6. Usa il modificatore di accesso pubblico per contrassegnare il costruttore come pubblico, il che significa che sarà accessibile anche al di fuori della classe.
  7. Creazione del costruttore della classe e inizializzazione delle variabili.
  8. Inizializza il valore della variabile real.
  9. Inizializza il valore della variabile su.
  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. Utilizza l'operatore + con numeri complessi. Questa linea aggiungerà la parte immaginaria di un numero alla parte immaginaria di un altro numero.
  15. Il programma restituirà il valore del risultato della variabile in caso di corretta esecuzione.
  16. Fine della definizione del nuovo significato di operatore +, cioè sovraccarico.
  17. Chiama il metodo print ().
  18. Stampa il nuovo numero complesso dopo l'aggiunta sulla console.
  19. Fine del corpo della funzione print ().
  20. Fine del corpo della classe TestClass.
  21. Chiamare la funzione main ().
  22. Passando i valori delle parti sia reali che complesse da sommare. La prima parte di c1 verrà aggiunta alla prima parte di c2, ovvero 9 + 4. La seconda parte di c1 verrà aggiunta alla seconda parte di c, ovvero 5 + 3.
  23. Esecuzione di un'operazione utilizzando l'operatore di overload + e memorizzando il risultato nella variabile c3.
  24. Stampa il valore della variabile c3 sulla console.
  25. Fine del corpo della funzione main ().

Sommario:

  • È possibile specificare più di un significato per un operatore C ++ in un ambito.
  • Questo è chiamato sovraccarico dell'operatore.
  • Il sovraccarico degli operatori fornisce un significato speciale di operatore per un tipo di dati definito dall'utente.
  • È possibile ridefinire la maggior parte degli operatori C ++ tramite l'overload di operatori.
  • Non tutti gli operatori C ++ possono essere sovraccaricati.
  • Affinché un operatore venga sovraccaricato, almeno uno degli operandi deve essere un oggetto definito dall'utente.
  • Solo gli operatori esistenti possono essere sovraccaricati. Non è possibile sovraccaricare nuovi operatori.