Überladung des []-Operators für zweidimensionale Arrays
Operatorüberladung ermöglicht es Programmierern, die Funktionalität bestehender Operatoren zu erweitern, um benutzerdefinierte Verhaltensweisen für zu erstellen ihre Klassen und Objekte. Ein häufiger Anwendungsfall ist die Überladung des []-Operators für den Zugriff auf Elemente eines Arrays. Ist es jedoch möglich, den []-Operator zweimal zu überladen und so effektiv ein zweidimensionales Array zu erstellen?
Doppelte Überladung des []-Operators
Ja, das ist möglich um den []-Operator mehrmals zu überladen, um ein zweidimensionales Array-Verhalten zu erreichen. Indem Sie einen [ ]-Operator definieren, um ein Objekt zurückzugeben, das selbst die Indizierung von [ ] verarbeiten kann, können Sie eine verschachtelte Array-ähnliche Struktur erstellen.
Beispielcode
Bedenken Sie das folgendes Codebeispiel:
class ArrayOfArrays { public: ArrayOfArrays() { _arrayofarrays = new int*[10]; for(int i = 0; i < 10; ++i) _arrayofarrays[i] = new int[10]; } class Proxy { public: Proxy(int* _array) : _array(_array) { } int operator[](int index) { return _array[index]; } private: int* _array; }; Proxy operator[](int index) { return Proxy(_arrayofarrays[index]); } private: int** _arrayofarrays; };
In diesem Code stellt die ArrayOfArrays-Klasse ein zweidimensionales Array dar. Der [ ]-Operator wird zweimal überladen:
Verwendung
Zur Verwendung des ArrayOfArrays Klasse können Sie es zweimal indizieren, als wäre es ein reguläres zweidimensionales Array:
ArrayOfArrays aoa; aoa[3][5]; // Access the element at row 3, column 5
Dieser Code ruft zuerst den Operator [ ] für die ArrayOfArrays-Instanz auf, der ein Proxy-Objekt für Zeile 3 zurückgibt Anschließend wird der Operator [ ] für das Proxy-Objekt aufgerufen, der das Element in Spalte 5 in Zeile 3 zurückgibt.
Durch die Implementierung einer doppelten Überladung von [ ] Mit dem Operator können Sie das Verhalten zweidimensionaler Arrays simulieren und verschachtelte Strukturen für komplexere Datenspeicherungs- und -abrufszenarien erstellen.
Das obige ist der detaillierte Inhalt vonKönnen Sie den Operator [] zweimal überladen, um ein zweidimensionales Array in C zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!