operator überladen



  • Hi ich hab ne klasse die ungefähr so aussieht:

    class Surface
    {
    public:
    	Surface(int width, int height);
    	~Surface();
    
    	Color &operator[] (int index)
    	{
    		return pixels[index];
    	}
    
    	Color &getPixel(int x, int y)
    	{
    		return pixels[/*pos*/];
    	}
    
    private:
    	Color *pixels;
    };
    

    Da ich den speicher zusammenhängend haben will möchte ich nur ein ein-dimensionales array benutzen, würde aber trozdem gerne über [][] (anstadt getPixel) drauf zugreifen können, gibts da eine möglichkeit?

    Gruss



  • Dazu brauchst du eine zweite Helfer Klasse:

    class HelpColor {
    
    public:
    HelpColor(int _index, Color *_pixels) : index(_index), pixels(_pixels) { }
    
    Color &operator[] (int y) {
        return pixels[index*y];
    }
    
    private:
    int index;
    Color *pixels;
    };
    
    class Surface
    {
    public:
    Surface(int width, int height);
    ~Surface();
    
    HelpColor operator[] (int index)
    {
    return HelpColor(index,pixels);
    }
    
    Color &getPixel(int x, int y)
    {
    return pixels[x*y];
    }
    
    private:
    Color *pixels;
    };
    

    Ungetestet

    //EDIT
    Irgendwas stimmt wohl mit den Code Tags nicht wenn man mit dem Operator [] hantiert?


  • Mod

    Storm.Xapek.de schrieb:

    Dazu brauchst du eine zweite Helfer Klasse:

    Im Allgemeinen benötigen wir ein Proxy-Objekt. In unserem speziellen Fall genügt auch ein einfacher Zeiger:

    class Surface
    {
    public:
        ...
    
        Color* operator[](int x)
        {
            return pixels+x*dim_y;
        }
    
        Color& getPixel(int x, int y)
        {
            return pixels[x*dim_y+y];
        }
    
    private:
        Color* pixels;
        int dim_x;
        int dim_y;
    };
    


  • Super, thx!


Anmelden zum Antworten