DaVinci wrote:
> /* how to overload the operation [] ,subscipt of 2D-array?
> * how can I get element through piece[i][j],rather than piece(i)[j]?
> * */
> #include"global.h"
> using namespace std;
> class Piece
> {
> public:
> Piece()
> {
> for(size_t i = 0;i<2;i++)
> for(size_t j = 0;j<3;j++)
> {
> piece[i][j] = i+ j;
> }
> for(size_t i=0;i<2;i++)
> {
> std::copy(piece[i],piece[i]+3,ostream_iterator<int>(cout," "));
> cout<<endl;
> }
> cout<<"----------------------"<<endl;
> }
> int* operator()(const int& t)//change operator() to operator[] is
> wrong ,why?
> {
> i = t; //
> return piece[i];
> }
> int operator[](const int & t)
> {
> return this->operator()(i)[t];
> }
> private:
> int i;//witchout varible i,how can I implement overload the () , []
> or[],[]
> int piece[2][3];
> };
> //----------------------------------------
> int main()
> {
> Piece p ;
> for(int i=0;i<2;i++)
> {
> for(int j=0;j<3;j++)
> {
> cout<<p(i)[j]<<" ";//p[i][j],??
> }
> cout<<endl;
> }
> }
> /*
> //output is
> 0 1 2
> 1 2 3
> ----------------------
> 0 1 2
> 1 2 3
> */
I recommend against using the method posted in the C++ FAQ.
It recommends you use a non-standard syntax.
If you want to use standard syntax check out the following link for an
example:
http://code.axter.com/dynamic_2d_array.h
However, for most requirements, I recommend using a vector of vector.
Example:
int col = 123;
int row = 456;
vector<vector<int> > My2dArray(col, vector<int>(row));
You can reference both the above vector code and the dynamic_2d_array
class using double index ([][])
My2dArray[0][0] = 99;
Check out the following link for wrapper classes using vector of
vector:
http://www.codeguru.com/forum/showthread.php?t=231046
http://www.codeguru.com/forum/showth...hreadid=297838