C++ Class member access operator -> overloading
C++ Operator Overloading and Function Overloading
The class member access operator (->) can be overloaded, but it is rather troublesome. It is defined to give a class "pointer" behavior. The operator -> must be a member function. If the -> operator is used, the return type must be a pointer or a class object.
The operator -> is usually used in combination with the pointer dereference operator * to implement "smart pointer" functionality. These pointers are objects that behave like normal pointers, except that when you access an object through the pointer, they perform other tasks. For example, when the pointer is destroyed, or when the pointer points to another object, the object is automatically deleted.
The dereference operator -> can be defined as a unary postfix operator. That is, given a class:
class Ptr{
//...
X * operator->();
};
ClassPtrObjects can be used to access classes.XIts members are used in a way very similar to pointers. For example:
void f(Ptr p )
{
p->m = 10 ; // (p.operator->())->m = 10
}
The statement p->m is interpreted as (p.operator->())->m. Similarly, the following example demonstrates how to overload the class member access operator ->.
Example
When the above code is compiled and executed, it will produce the following results:
10 12 11 13 12 14 13 15 14 16 15 17 16 18 17 19 18 20 19 21other extensions