The C++Course provides a general introduction to programming in C++. It is based on A.B. Downey's book, How to Think Like a Computer Scientist. Click here for details. |
![]() |
Home ![]() ![]() |
||
See also: Overloading, The = Operator | ||
![]() ![]() ![]() ![]() ![]() ![]() |
||
Operator Overloading and <<
There are two operators that are common to many object types: << and =. << converts the object to some reasonable string representation so it can be outputted, and = is used to copy objects. When you output an object using cout, C++ checks to see whether you have provided a << definition for that object. If it can't find one, it will refuse to compile and give an error such as complex.cpp:11: no match for `_IO_ostream_withassign & << Complex &'Here is what << might look like for the Complex class: ostream& operator << (ostream& os, Complex& num) {os << num.real << " + " << num.imag << "i"; return os; }
The return type for << is ostream&, which is the datatype of a cout object. By returning the os object (which, like ostream, is just an abbreviation of output stream), you can string together multiple << commands such as cout << "Your two numbers are " << num1 << " and " << num2;To illustrate why that's a good thing, consider what you would be forced to do if you didn't return the ostream object: cout << "Your two numbers are ";cout << num1; cout << " and "; cout << num2; Because the first example allows stringing << statements together, all the display code fits easily on one line. The output from both statements is the same, displaying "Your two numbers are 3 + 2i and 1 + 5i". This version of << does not look good if the imaginary part is negative. As an exercise, fix it.
|
||
Home ![]() ![]() |