Überladen Sie den Klammeroperator in C++
Diese triviale Programmieranleitung überlädt den Klammeroperator ([]
) als Getter und Setter für die Klassenobjekte.
Lassen Sie uns zunächst eine kurze Einführung in das Überladen von Operatoren geben.
Operatorüberladung in C++
Die Idee, das Verhalten von Operatoren bei der Arbeit mit benutzerdefinierten Datentypen wie Klassen und Strukturen zu ändern, wird als Operatorüberladung bezeichnet. Diese ähneln Elementfunktionen in einer Klasse, die aufgerufen wird, wenn dieser Operator verwendet wird.
Nehmen wir zum Beispiel an, wir wollen ermitteln, welcher Mitarbeiter in einer Klasse von Mitarbeitern
ein höheres Gehalt hat als die anderen. Der Operator >
kann überladen werden, um das Datenelement Gehalt
der beiden Objekte zu vergleichen und das Ergebnis zurückzugeben.
Die Syntax für das Überladen von Operatoren lautet wie folgt:
class ClassIdentifier {
[AccessSpecifier] : ReturnType operator OperatorSymbol([list of arguments]) {
// definition
}
};
Der optionale Zugriffsbezeichner sollte vorzugsweise öffentlich
sein. Wenn Sie es privat
machen, kann auf die Überladungsfunktion nur innerhalb der Klasse zugegriffen werden.
Dies ist normalerweise in den meisten Fällen unerwünscht.
Beachten Sie, dass operator
ein Schlüsselwort ist, das zum Überladen von Operatoren verwendet wird; Danach geben wir das Symbol des zu überladenden Operators an. Denken Sie daran, dass wir Operatoren für grundlegende Datentypen wie int, char, float usw. nicht überladen können.
Überladen Sie den Bracket-Operator []
in C++
Wir können auch den Klammeroperator []
überladen, damit er zum Abrufen und Festlegen des Werts in einem Klassenobjekt verwendet werden kann.
Zum Beispiel haben wir die Klasse MyClass
mit einem Array als Datenelement. Um auf die Elemente dieses Arrays mit dem Namen des Objekts zuzugreifen, können wir den Klammeroperator []
wie folgt überladen:
class MyClass {
private:
int arr[5];
public:
int operator[](int i) const { return arr[i]; } // for getting value
int& operator[](int i) { return arr[i]; } // for setting value
};
Beachten Sie, dass wir den Verweis auf den angegebenen Index zurückgegeben haben, um den Wert festzulegen, damit der Benutzer ihn ändern kann. Sie können es im Treiberprogramm wie folgt verwenden:
int main() {
MyClass obj;
obj[0] = 100; // setting values
obj[1] = 200; // setting values
cout << obj[0] << endl; // getting values
cout << obj[1] << endl; // getting values
return 0;
}
In der obigen main()
-Funktion, wenn obj[0] = 100;
ausgeführt wird, ruft sie die zweite überladene Funktion mit 0
als Argument zu i
auf. Die überladene Setter-Methode gibt eine Integer-Referenz auf den Speicherplatz des 0-ten Index von arr
zurück.
Der Wert auf der rechten Seite des Zuweisungsoperators (=
) wird nun an der zurückgegebenen Stelle zugewiesen. Daher erhält der 0. Index des Datenelements von obj
den Wert 100
.
Lassen Sie uns die obigen Codeteile zu einem vollständigen ausführbaren Programm kombinieren.
#include <iostream>
using namespace std;
class MyClass {
private:
int arr[5];
public:
int operator[](int i) const { return arr[i]; } // for getting value
int& operator[](int i) { return arr[i]; } // for setting value
};
int main() {
MyClass obj;
obj[0] = 100; // setting values
obj[1] = 200; // setting values
cout << obj[0] << endl; // getting values
cout << obj[1] << endl; // getting values
return 0;
}
Ausgang:
100
200