Course navigation
 
Overloading the operator ->
Objective
Overload the -> operator for the vector class so the operator implements an iterator.
  Background
The operator -> is overloadable provided it is
  1. a nonstatic member function returning either a pointer to a class object
    or
  2. an object of a class for which operator-> is defined.

Such an overloaded structure pointer operator is called a smart pointer operator. It usually returns an ordinary pointer after first doing some initial computation. One use of this type of operator is as an iterator function.
  The following vector class member function is a form of iterator:
Code Begin
int& vect::iterate()
{
   static int i = 0;
   i = i % size;
   return (p[i++]);
}
Code End
It is called an iterator because it returns each element value of a vect in sequence.
Instructions
Implement an iterator by overloading the -> operator for the following vector class:
Code Begin
class vect {
public:
   vect(int n = 10);
   ~vect() { delete []p; }
   int& element(int i);        //access p[i]
   int  ub() const { return (size - 1); }  //upper bound
 
private:
   int*  p;
   int   size;
}

int& vect::element(int i)
{
   assert (i >= 0 && i < size);
   return p[i];
}
Code End
The function should have the following prototype:
Code Begin
int* vect::operator->() const;
Code End
The code for the vector class is available in a file named vector.cpp, which can be found in the compressed course download file available on the Resources age.
Paste your code below and click the OK, I'm Done button when you are ready to submit this exercise.