The overloaded stream insertion operator (<<
) is used in an expression in which the left operand has type ostream &
, as in cout << classObject
. To use the operator in this manner where the right operand is an object of a user-defined class, it must be overloaded as a non-member function. To be a member function, operator <<
would have to be a member of class ostream
. This is not possible for user-defined classes, since we are not allowed to modify C++ Standard Library classes. Similarly, the overloaded stream extraction operator (>>
) is used in an expression in which the left operand has the type istream &
, as in cin >> classObject
, and the right operand is an object of a user-defined class, so it, too, must be a non-member function. Also, each of these overloaded operator functions may require access to the private
data members of the class object being output or input, so these overloaded operator functions can be made friend
functions of the class for performance reasons.