operator [] überladen
-
hi,
folgendes Problem:
Ich möchte eine Klasse schreiben, die mir den Umgang mit 2-dimensionalen Arrays erleichtert. der Zugriff sollte über den [] Operator laufen.Hier die einfache Form der Klasse:
template <class T> class Array2Dim { Array2Dim(UINT Width, UINT Height) { width = Width; height = Height; array = new T[width*height]; } T &operator[][] (UINT x, UINT y) //FEHLER (wär auch zu schön!) { return(array[y*width + x]); } private: T *array; UINT width, height; };
Ich stelle mir den Zugriff folgendermaßen vor:
Array2Dim<int> ar(5,5); ar[1][3] = 2;
(wie bei einem normalen array)
C++ scheint in diesem Fall aber nur ein Parameter zu akzeptieren.
Danke für eure Hilfe.
-
Eine Memberfunkion/-operator kann nur auf auf ein Klassenelement angewendet werden, nicht auf einen Pointer. Dafür mußt du den Operator außerhalb der Klasse definieren.
Versuch doch einen operator[], der einen pointer auf ein Arrayelement liefert, das zweiter [] ist dann der normale Arrayzugriff.
-
eine Proxy-Klasse wäre eine Möglichkeit. Einfach eine Nested-Klasse definieren die ebenfalls einen operator[] überlädt.
class Proxy { public: Proxy(T* p, int x) : p(p), x(x) { } T& operator[](int y) { return p[x * y]; } private: T* p; int x; }; //... Proxy operator[](int x) { return Proxy(array,x) }
-
http://www.c-plusplus.net/forum/viewtopic.php?t=39489
zweites Beispiel.
-
Alles klar.
Danke für die schnelle Hilfe!