Surcharge de l'opérateur [] pour les tableaux bidimensionnels
La surcharge d'opérateur permet aux programmeurs d'étendre les fonctionnalités des opérateurs existants pour créer des comportements personnalisés pour leurs classes et leurs objets. Un cas d'utilisation courant consiste à surcharger l'opérateur [] pour accéder aux éléments d'un tableau. Cependant, est-il possible de surcharger l'opérateur [] deux fois, créant ainsi un tableau bidimensionnel ?
Double surcharge de l'opérateur []
Oui, c'est possible pour surcharger l'opérateur [] plusieurs fois pour obtenir un comportement de tableau bidimensionnel. En définissant un opérateur [ ] pour renvoyer un objet qui lui-même peut gérer l'indexation [ ], vous pouvez créer une structure de type tableau imbriquée.
Exemple de code
Considérez le exemple de code suivant :
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; };
Dans ce code, la classe ArrayOfArrays représente un tableau à deux dimensions. L'opérateur [ ] est surchargé deux fois :
Utilisation
Pour utiliser le ArrayOfArrays, vous pouvez l'indexer deux fois comme s'il s'agissait d'un tableau bidimensionnel normal :
ArrayOfArrays aoa; aoa[3][5]; // Access the element at row 3, column 5
Ce code invoquera d'abord l'opérateur [ ] sur l'instance ArrayOfArrays, qui renverra un objet Proxy pour la ligne 3. Ensuite, il invoquera l'opérateur [ ] sur l'objet Proxy, qui renverra l'élément de la colonne 5 de la ligne 3.
En implémentant double surcharge de l'opérateur [ ], vous pouvez simuler le comportement de tableaux bidimensionnels et créer des structures imbriquées pour des scénarios de stockage et de récupération de données plus complexes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!