Thursday, 17 February 2011

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

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];

}



No comments:

Post a Comment