[comp.lang.c++] C++ overloading of [] continued.

powell@ole.UUCP (Gary Powell) (06/07/90)

Re: Overloading []

This double class object appears to do what I want but boy
what a lot of code just to do 2 dimminsional arrays!
I would gladly take any suggestions on how to reduce this mess.

The basic idea here is have n class types so that each [] operation
evaluates to the next dim. until an elemental item is reached.
what I want is the ability to do the evaluation myself in one step instead.
Ie overload [](int,int,....int) or [](int)[](int)....[](int).

#include <stream.h>

class INT_ROW {
    public:
	INT_ROW(int);
	int & operator[](int);
	~INT_ROW();
    private:
	int max_row,
	    *array;
};

INT_ROW::INT_ROW(int r)
{
    int
	i;

    max_row = r;
    array = new int [r];

    // initialize the data
    for (i = 0; i< max_row; i++)
	array[i] = 0;
}
INT_ROW::~INT_ROW()
{
    delete array;
    max_row = 0;
}
int & INT_ROW::operator[](int r)
{
    int
	*ptr;

    if (r >= max_row)
    {
	cout << "Array bounds exceeded.\n";
	exit (1);
    }
    ptr = &array[r];

    return *ptr;
}

class INT_ARRAY {
    public:
	INT_ARRAY(int,int);
	INT_ROW & operator[](int);
	~INT_ARRAY();
    private:
	int max_col;
	INT_ROW **array;
};

INT_ARRAY::INT_ARRAY(int r, int c)
{
    int
	i;

    max_col = c;
    array = new INT_ROW *[c];
    for (i = 0; i< c; i++)
    {
	array[i] = new INT_ROW (r) ;
    }
}

INT_ARRAY::~INT_ARRAY()
{
    int
	i;

    for (i = 0; i< max_col; i++)
    {
	delete array[i];
    }
    delete array;
    max_col = 0;
}

INT_ROW & INT_ARRAY::operator[](int c)
{
    if (c < 0 || c >= max_col)
    {
	cout << "Error ! exceeding array bounds\n";
	exit (1);
    }
    return *array[c];
}

main()
{
    INT_ARRAY table(4, 5);

    table[1][2] = 2;

    cout << "table[1,2] " << table[1][2] << "\n";
}

-- 
   _Q   _Q    _Q     _Q  _Q_Q    _Q    _Q                                    _Q
  /_\) /_\)  /_\)   /_\)/_/\\)  /_\)  /_\)                    Gary Powell   /_\)
_O|/O_O|/O__O|/O___O|/O_OO|/O__O|/O__O|/O__________________________________O|/O_
uunet!uw-beaver!sumax!ole!powell            Seattle Silicon Corp. (206) 828-4422