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)
    }
    




  • Alles klar.
    Danke für die schnelle Hilfe!


Anmelden zum Antworten