Overloading [] Operator in a class to access data within the class by indexing method.

Thursday, February 17, 2011

In the previous article Overloading [] Operator, we overloaded the [] operator in a class to access data within the class by indexing method.

The operator [] function was defined as below:

  int myclass::operator[](int index)

{
// if not out of bound
if(index return a[index];
}

As you can see, the above operator function is returning values, hence it could only be used on the right hand side of a statement. It’s a limitation!

You very well know that a statement like below is very common with respect to arrays:

a[1]=10;

But as I said, the way we overloaded the [] operator, statement like the one above is not possible. The good news is, it is very easy to achieve this.

For this we need to overload the [] operator like this:

  int &myclass::operator[](int index)

{
// if not out of bound
if(index return a[index];
}

By returning a reference to the particular element, it is possible to use the index expression on the left hand side of the statement too.

The following program illustrates this:



// Example Program illustrating
// the overloading of [] operator
// ----
// now the index expression can be
// used on the left side too
#include

class myclass
{
// stores the number of element
int num;
// stores the elements
int a[10];

public:
myclass(int num);

int &operator[](int);
};

// takes the number of element
// to be entered.(<=10)
myclass::myclass(int n)
{
num=n;
for(int i=0;i {
cout<<"Enter value for element "<1
<<":";
cin>>a[i];
}
}

// returns a reference
int &myclass::operator[](int index)
{
// if not out of bound
if(index return a[index];
}

void main()
{
myclass a(2);

cout<0]< cout<1]<
// indexing expression on the
// left-hand side

a[1]=21;
cout<1];
}

0 comments:

Post a Comment