Class member access can be controlled by overloading the member access operator (->). This operator is considered a unary operator in this usage, and the overloaded operator function must be a class member function. Therefore, the declaration for such a function is:
where class-type is the name of the class to which this operator belongs. The member access operator function must be a nonstatic member function.
This operator is used (often in conjunction with the pointer-dereference operator) to implement "smart pointers" that validate pointers prior to dereference or count usage.
The . member access operator cannot be overloaded.