"Jim Langston" <tazmaster@rocketmail.com> wrote in message
news:KB5fg.137$212.111@fe04.lga...
I wanted to do an operator override for [][] but couldnt' figure out the
syntax. I tried this (code that doesn't compile commented out with //:
class CMyBitmap
{
public:
CMyBitmap( int Rows, int Columns ): Rows_( Rows ), Columns_( Columns )
{
Data_ = new SPixel[ Rows * Columns ];
}
~CMyBitmap()
{
delete[] Data_;
}
// error C2804: binary 'operator [' has too many parameters
// SPixel& operator[]( const int Row, const int Column )
// {
// return Data_[ Columns_ * Row + Column ];
// }
// error C2092: '[]' array element type cannot be function
// SPixel& operator[][]( const int Row, const int Column )
SPixel& Pixel( const int Row, const int Column )
{
return Data_[ Columns_ * Row + Column ];
}
private:
SPixel* Data_;
int Rows_;
int Columns_;
// No copy or assignment yet so disable by making private.
CMyBitmap ( CMyBitmap const& ) {};
CMyBitmap& operator=( CMyBitmap const& ) {};
};
Can we override 2d array access?
You should declare your operator as
something operator [] (int Row);
Then "something" must define
SPixel &operator [] (int Column);
The question is, what is "something"? The best thing is probably to make
it a separate class. However, a well known cheat is to make "something" an
SPixel*, which automatically provides this second operator by the usual
rules for subscripting a pointer. Hence
SPixel *operator [] (int Row) {return Row * Columns_;}
will do it!
This is an excellant solution, but I can't check for column overflow. I
mind for other classes.