Was ist eine Überlastung des Bedieners?
Bei Verwendung der Operatorüberladung in C ++ können Sie mehr als eine Bedeutung für einen Operator in einem Bereich angeben. Der Zweck der Operatorüberladung besteht darin, eine spezielle Bedeutung eines Operators für einen benutzerdefinierten Datentyp bereitzustellen.
Mithilfe der Operatorüberladung können Sie die meisten C ++ - Operatoren neu definieren. Sie können die Operatorüberladung auch verwenden, um verschiedene Operationen mit einem Operator auszuführen.
In diesem C ++ - Tutorial lernen Sie:
- Was ist eine Überlastung des Bedieners?
- Syntax
- Verschiedene Ansätze zur Operatorüberladung in C ++
- Können alle C ++ - Operatoren überladen werden?
- Dinge, an die man sich erinnern sollte:
- Regeln für das Überladen von Bedienern:
- So überladen Sie den Bediener:
Syntax
Um einen C ++ - Operator zu überladen, sollten Sie eine spezielle Funktion innerhalb der Klasse wie folgt definieren:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Hier ist eine Erklärung für die obige Syntax:
- Der Rückgabetyp ist der Rückgabetyp für die Funktion.
- Als Nächstes erwähnen Sie das Operator-Schlüsselwort.
- Das Symbol kennzeichnet das zu überladende Bedienersymbol. Zum Beispiel +, -, <, ++.
- Die Argumente können auf die gleiche Weise wie Funktionen an die Operatorfunktion übergeben werden.
Beispiel 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;}
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Aufnahme der iostream-Header-Datei in unseren Code zur Verwendung ihrer Funktionen.
- Nehmen Sie den Standard-Namespace in unser Programm auf, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Erstellen Sie eine Klasse mit dem Namen TestClass.
- Verwenden Sie den Modifikator für den privaten Zugriff, der ein Klassenmitglied als privat zugänglich markiert.
- Erstellen Sie eine ganzzahlige Variablenanzahl. Diese Variable ist privat zugänglich.
- Verwenden Sie den Modifikator "Öffentlicher Zugriff", der ein Klassenmitglied als privat zugänglich markiert.
- Verwenden Sie einen Klassenkonstruktor, um den Variablenzähler auf 5 zu initialisieren.
- Überladen Sie die Bedeutung des Operators -.
- Der Operator dekrementiert den Wert der Variablen x um 1.
- Ende des Bedienerüberlastungsabschnitts. Der Bediener hat einen neuen Namen erhalten.
- Definieren einer Funktion mit dem Namen Display ().
- Drucken Sie den Wert der Variablenanzahl zusammen mit anderem Text auf der Konsole aus, wenn die Funktion Display () aufgerufen wird. Das} markiert das Ende des Hauptteils der Funktion Display ().
- Ende des Klassenkörpers.
- Rufen Sie die Funktion main () auf. Die Programmlogik sollte innerhalb dieser Funktion hinzugefügt werden.
- Erstellen Sie eine Instanz der Klasse TestClass und geben Sie ihr den Namen tc.
- Dies ruft die Funktion void operator - () auf.
- Verwenden Sie die Haltung der TestClass-Klasse, um die Funktion Display () aufzurufen.
- Die Funktion muss nach erfolgreichem Abschluss einen Wert zurückgeben.
- Ende des Hauptteils der Funktion main ().
Verschiedene Ansätze zur Operatorüberladung in C ++
Sie können eine Operatorüberladung durchführen, indem Sie eine der folgenden Arten von Funktionen implementieren:
- Mitgliedsfunktion
- Nichtmitgliedsfunktion
- Freundfunktion
- Die Operatorüberladungsfunktion kann eine Elementfunktion sein, wenn ein linker Operand ein Objekt der Klasse ist.
- Wenn der linke Operand unterschiedlich ist, sollte die Operatorüberladungsfunktion eine Nichtmitgliedsfunktion sein.
Sie können die Operatorüberladungsfunktion zu einer Freundfunktion machen, wenn sie auf die privaten und geschützten Klassenmitglieder zugreifen muss.
Können alle C ++ - Operatoren überladen werden?
Nein. Es gibt C ++ - Operatoren, die nicht überladen werden können.
Sie beinhalten:
- :: -Scope-Auflösungsoperator
- ?: -interner Operator.
- . -Mitgliedswähler
- Größe des Operators
- * -Mitglied Zeigerauswahl
Dinge, an die man sich erinnern sollte:
- Mit der Überladung von Operatoren können Sie die Funktionsweise eines Operators nur für die benutzerdefinierten Typen (Objekte, Strukturen) neu definieren. Sie können es nicht für integrierte Typen (float, char, int usw.) verwenden.
- Die Operatoren = und & C ++ sind standardmäßig überladen. Beispielsweise können Sie die Objekte derselben Klasse direkt mit dem Operator = kopieren.
- Die Vorrangstellung von Operatoren ändert nichts an der Assoziativität und der Vorrangstellung von Operatoren. Sie können die Reihenfolge der Auswertung jedoch in Klammern ändern.
- Es gibt vier Operatoren, die Sie in C ++ nicht überladen können. Dazu gehören der Bereichsauflösungsoperator (: :), der Elementauswahloperator (.), Die Elementauswahl über einen Zeiger auf den Funktionsoperator (. *) Und der ternäre Operator (? :).
Regeln für das Überladen von Bedienern:
Hier sind die Regeln für das Überladen von Operatoren:
- Damit dies funktioniert, muss mindestens ein Operand ein benutzerdefiniertes Klassenobjekt sein.
- Sie können nur vorhandene Operatoren überladen. Sie können neue Operatoren nicht überladen.
- Einige Operatoren können nicht mit einer Friend-Funktion überladen werden. Solche Operatoren können jedoch mithilfe der Elementfunktion überladen werden.
So überladen Sie den Bediener:
Beispiel 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;}
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Aufnahme der iostream-Header-Datei in unseren Code zur Verwendung ihrer Funktionen.
- Nehmen Sie den Standard-Namespace in unser Programm auf, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Erstellen Sie eine Klasse mit dem Namen OperatorOverload.
- Verwenden Sie den Modifikator für den privaten Zugriff, der ein Klassenmitglied als privat zugänglich markiert.
- Erstellen Sie eine Ganzzahlvariable x. Diese Variable ist privat zugänglich.
- Verwenden Sie den Modifikator "Öffentlicher Zugriff", der ein Klassenmitglied als privat zugänglich markiert.
- Verwenden Sie einen Klassenkonstruktor, um die Variable x auf 10 zu initialisieren.
- Überladen Sie die Bedeutung des ++ - Operators.
- Der Operator erhöht den Wert der Variablen x um 2.
- Ende des Bedienerüberlastungsabschnitts. Der Bediener hat einen neuen Namen erhalten.
- Aufruf der Funktion Print ().
- Drucken Sie den Wert der Variablen x zusammen mit anderem Text auf der Konsole, wenn die Funktion Print () aufgerufen wird.
- Ende des Hauptteils der Funktion Print ().
- Ende des Klassenkörpers.
- Rufen Sie die Funktion main () auf. Die Programmlogik sollte innerhalb dieser Funktion hinzugefügt werden.
- Erstellen Sie eine Instanz der OperatorOverload-Klasse mit dem Namen ov.
- Dies ruft die Funktion void operator ++ () auf.
- Verwenden Sie die Haltung der OperatorOverload-Klasse, um die Funktion Print () aufzurufen.
- Die Funktion muss nach erfolgreichem Abschluss einen Wert zurückgeben.
- Ende des Hauptteils der Funktion main ().
Beispiel 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();}
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Aufnahme der iostream-Header-Datei in unser Programm, um deren Funktionen nutzen zu können.
- Nehmen Sie den Standard-Namespace in unser Programm auf, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Erstellen Sie eine Klasse mit dem Namen TestClass. Das {markiert den Beginn des Klassenkörpers.
- Verwenden Sie den Modifikator für den privaten Zugriff, um Variablen als privat zu markieren. Dies bedeutet, dass nur innerhalb der Klasse auf sie zugegriffen werden kann.
- Definieren Sie zwei ganzzahlige Variablen, real und über.
- Verwenden Sie den Modifikator public access, um den Konstruktor als public zu markieren. Dies bedeutet, dass auch außerhalb der Klasse auf ihn zugegriffen werden kann.
- Erstellen des Klassenkonstruktors und Initialisieren der Variablen.
- Initialisieren Sie den Wert der Variablen real.
- Initialisieren Sie den Wert der Variablen über.
- Ende des Konstruktorkörpers.
- Überschreiben Sie die Bedeutung des Operators +.
- Erstellen Sie das Datentypergebnis vom Typ TestClass.
- Verwenden Sie den Operator + mit komplexen Zahlen. Diese Zeile fügt den Realteil einer Zahl zum Realteil einer anderen Zahl hinzu.
- Verwenden Sie den Operator + mit komplexen Zahlen. Diese Zeile fügt den Imaginärteil einer Zahl zum Imaginärteil einer anderen Zahl hinzu.
- Das Programm gibt nach erfolgreicher Ausführung den Wert des Variablenergebnisses zurück.
- Ende der Definition der neuen Bedeutung des Operators +, dh Überladung.
- Rufen Sie die print () -Methode auf.
- Drucken Sie die neue komplexe Nummer nach dem Hinzufügen auf der Konsole aus.
- Ende der Funktion print ().
- Ende des Körpers der TestClass-Klasse.
- Aufruf der Funktion main ().
- Übergabe der Werte von Real- und komplexen Teilen, die hinzugefügt werden sollen. Der erste Teil von c1 wird zum ersten Teil von c2 hinzugefügt, dh 9 + 4. Der zweite Teil von c1 wird zum zweiten Teil von c hinzugefügt, dh 5 + 3.
- Durchführen einer Operation mit dem Operator overloaded + und Speichern des Ergebnisses in der Variablen c3.
- Drucken des Werts der Variablen c3 auf der Konsole.
- Ende des Hauptteils der Funktion main ().
Zusammenfassung:
- Sie können mehr als eine Bedeutung für einen C ++ - Operator in einem Bereich angeben.
- Dies wird als Operatorüberladung bezeichnet.
- Das Überladen von Operatoren bietet eine spezielle Bedeutung eines Operators für einen benutzerdefinierten Datentyp.
- Sie können die meisten C ++ - Operatoren durch Überladen von Operatoren neu definieren.
- Nicht alle C ++ - Operatoren können überladen werden.
- Damit ein Operator überladen wird, muss mindestens einer der Operanden ein benutzerdefiniertes Objekt sein.
- Nur vorhandene Operatoren können überlastet werden. Sie können neue Operatoren nicht überladen.