There are occasions when you have to hand a class object to a member function as an ordinary argument, rather than via the class-pointer operator or the class-member operator.
For example, if you want to define a function that takes two class-object arguments, only one, at most, can be delivered via the class-pointer operator or the class-member operator.
Also, if you want to overload an operator, such as the output operator, you
are restrained, because operator operands cannot be delivered via the
class-pointer operator, ->
, or via the class-member operator.