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<num)
      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<num)
      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 <iostream.h>
  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<num;i++)
    {
      cout<<"Enter value for element "<<i+1<<":";
      cin>>a[i];
    }
  }
  // returns a reference
  int &myclass::operator[](int index)
  {
    // if not out of bound
    if(index<num)
      return a[index];
  }
  void main()
  {
    myclass a(2);
    cout<<a[0]<<endl;
    cout<<a[1]<<endl;
    // indexing expression on the
    // left-hand side
    a[1]=21;
    cout<<a[1];
  }
Related Articles:
-  
 
 
-  
 Adding 
 Flexibility to Operators while Overloading them
 
-  
 Using 
 Friends to Overload all the Overloaded Arithmetic Operators
 
-  
 Class 
 with all the Overloaded Arithmetic Operators
 
-  
 Overloading 
 the Short-Hand Operators (+= and -=) using Friend Functions
 
 
0 comments:
Post a Comment