Lesson 12 | Overloading I/O operators |
Objective | Overload operator << to output playing card |
Overloading Output Operator in C++
Overload the operator << so it outputs a playing card in a nicely formatted style.
Let us write these functions for the type rational
:
class rational {
public:
friend ostream&
operator<<(ostream& out, rational x);
friend istream&
operator>>(istream& in, rational& x)
.....
private:
long a, q;
};
ostream& operator<<(ostream& out, rational x){
return (out << x.a << " / " << x.q << '\t');
}
Operators as Member Functions and Global Functions
Whether an operator function is implemented as a member function or as a global function, the operator is still used the same way in expressions. So which is best? When an operator function is implemented as a member function, the leftmost (or only) operand must be an object (or a reference to an object) of the operator’s class. If the left operand must be an object of a different class or a fundamental type, this operator function must be implemented as a global function. A global operator function can be made a friend of a class if that function must access private or protected members of that class directly. Operator member functions of a specific class are called (implicitly by the compiler) only when the left operand of a binary operator is specifically an object of that class, or when the single operand of a unary operator is an object of that class.
Why Overloaded Stream Insertion and Extraction Operators Are Overloaded as Global Functions
Overloading Insertion Operator - Exercise