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:
#includeusing 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:
- Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
- Includere lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
- Crea una classe denominata TestClass.
- Utilizza il modificatore di accesso privato, che contrassegna un membro della classe come accessibile privatamente.
- Crea un numero intero di variabili. Questa variabile sarà accessibile privatamente.
- Usa il modificatore di accesso pubblico, che contrassegna un membro della classe come accessibile privatamente.
- Utilizzare un costruttore di classi per inizializzare il contatore delle variabili su 5.
- Sovraccaricare il significato dell'operatore -.
- L'operatore decrementerà il valore della variabile x di 1.
- Fine della sezione relativa al sovraccarico dell'operatore. All'operatore è stato assegnato un nuovo nome.
- Definizione di una funzione denominata Display () function.
- 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 ().
- Fine del corpo della classe.
- Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno di questa funzione.
- Crea un'istanza della classe TestClass e assegnagli il nome tc.
- Questo chiamerà la funzione void operator - ().
- Utilizzare la posizione della classe TestClass per chiamare la funzione Display ().
- La funzione deve restituire un valore in caso di completamento corretto.
- 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:
- Funzione membro
- Funzione non membro
- 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:
- 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.).
- Gli operatori = e & C ++ sono sovraccaricati per impostazione predefinita. Ad esempio, puoi copiare gli oggetti della stessa Classe direttamente utilizzando l'operatore =.
- La precedenza degli operatori non modifica l'associatività e la precedenza degli operatori. Tuttavia, è possibile modificare l'ordine di valutazione utilizzando le parentesi.
- 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:
#includeusing 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:
- Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
- Includere lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
- Crea una classe denominata OperatorOverload.
- Utilizza il modificatore di accesso privato, che contrassegna un membro della classe come accessibile privatamente.
- Crea una variabile intera x. Questa variabile sarà accessibile privatamente.
- Usa il modificatore di accesso pubblico, che contrassegna un membro della classe come accessibile privatamente.
- Usa un costruttore di classi per inizializzare la variabile x a 10.
- Sovraccaricare il significato dell'operatore ++.
- L'operatore incrementerà il valore della variabile x con 2.
- Fine della sezione relativa al sovraccarico dell'operatore. All'operatore è stato assegnato un nuovo nome.
- Chiamare la funzione Print ().
- Stampa il valore della variabile x insieme ad altro testo sulla console quando viene chiamata la funzione Print ().
- Fine del corpo della funzione Print ().
- Fine del corpo della classe.
- Chiama la funzione main (). La logica del programma dovrebbe essere aggiunta all'interno di questa funzione.
- Crea un'istanza della classe OperatorOverload denominata ov.
- Questo chiamerà la funzione void operator ++ ().
- Utilizzare la posizione della classe OperatorOverload per chiamare la funzione Print ().
- La funzione deve restituire un valore in caso di completamento corretto.
- 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:
- Includere il file di intestazione iostream nel nostro programma per poter utilizzare le sue funzioni.
- Includere lo spazio dei nomi std nel nostro programma per utilizzare le sue classi senza chiamarlo.
- Crea una classe denominata TestClass. La {segna l'inizio del corpo della classe.
- Utilizzare il modificatore di accesso privato per contrassegnare le variabili come private, il che significa che è possibile accedervi solo dall'interno della classe.
- Definisci due variabili intere, reale e superiore.
- Usa il modificatore di accesso pubblico per contrassegnare il costruttore come pubblico, il che significa che sarà accessibile anche al di fuori della classe.
- Creazione del costruttore della classe e inizializzazione delle variabili.
- Inizializza il valore della variabile real.
- Inizializza il valore della variabile su.
- Fine del corpo del costruttore.
- Sostituisci il significato dell'operatore +.
- Creare il risultato del tipo di dati di tipo TestClass.
- Usa l'operatore + con numeri complessi. Questa riga aggiungerà la parte reale di un numero alla parte reale di un altro numero.
- Utilizza l'operatore + con numeri complessi. Questa linea aggiungerà la parte immaginaria di un numero alla parte immaginaria di un altro numero.
- Il programma restituirà il valore del risultato della variabile in caso di corretta esecuzione.
- Fine della definizione del nuovo significato di operatore +, cioè sovraccarico.
- Chiama il metodo print ().
- Stampa il nuovo numero complesso dopo l'aggiunta sulla console.
- Fine del corpo della funzione print ().
- Fine del corpo della classe TestClass.
- Chiamare la funzione main ().
- 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.
- Esecuzione di un'operazione utilizzando l'operatore di overload + e memorizzando il risultato nella variabile c3.
- Stampa il valore della variabile c3 sulla console.
- 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.