Operator Overloading  «Prev  Next»
Lesson 14 Overloading the structure pointer operator
ObjectiveOverload -> operator for vector class.

Overloading Pointer the C++ Operator

Overload the -> operator for the vector class so the operator implements an iterator.
The structure pointer operator -> can be overloaded as a nonstatic class member function. The overloaded structure pointer operator is a unary operator on its left operand. The argument must be either a class object or a reference of this type. It can return either a pointer to a class object or an object of a class for which the -> operator is defined.
In the following example we overload the structure pointer operator inside the class t_ptr. Objects of type t_ptr act as controlled access pointers to objects of type triple:

// Overloading the structure pointer operator.
#include <iostream.h>

class triple {
public:
   triple(int a, int b, int c) { i = a; j = b; k = c; }
   void print() { cout << "\ni = " << i << ", j = "
     << j << ", k = " << k; }
private:
   int      i, j, k;
};

triple   unauthor(0, 0, 0);

class t_ptr {
public:
   t_ptr(bool f, triple* p) { access = f; ptr = p; }
   triple*  operator ->();
private:
   bool  access;
   triple*  ptr;
};

triple* t_ptr::operator ->(){
   if (access)
      return (ptr);
   else {
      cout << "\nunauthorized access";
      return (&unauthor);
   }
}

The variable t_ptr::access is tested by the overloaded operator ->, and, if true, access is granted. The following code illustrates this:

void main(){
   triple  a(1, 2, 3), b(4, 5, 6);
   t_ptr ta(false, &a), tb(true, &b);
    
   ta -> print();   //access denied
   tb -> print();   //access granted
}

Overloading Unary Arithmetic Operators

The operators +, -, * and & have both binary and unary forms. (Unary * is a pointer dereference, and unary & is the address operator.) To overload the unary form, simply reduce the number of arguments by one. For example, unary negation can be written as a function that takes one argument, instead of two:

Fraction operator-(const Fraction& value)
{
Fraction result(-value.numerator(), value.denominator());
return result;
}

A unary operator defined as a member function takes no arguments.

Overload Indirect Member Selection

Click the Exercise link below to overload the -> operator for the vector class so the operator implements an iterator.
Overload Indirect Member Selection