Overloading input/output operators in C++

Onur Uzun
Onur Uzun
Nov 6, 2017 · 1 min read

In C++, stream insertion operator << is used for output and stream extraction operator >> is used for input.

cout is an object of ostream class which is a compiler defined class. When we do cout<<obj where obj is an object of our class, the compiler first looks for an operator function in ostream, then it looks for a global function. One way to overload insertion operator is to modify ostream class which may not be a good idea. So we make a global method and if we want to allow them to access private data members of class, we must make them friend.

#include <iostream>
using namespace std;

class Complex
int real, imag;
Complex(int r = 0, int i =0)
{ real = r; imag = i; }
friend ostream & operator << (ostream &out, const Complex &c);
friend istream & operator >> (istream &in, Complex &c);

ostream & operator << (ostream &out, const Complex &c)
out << c.real;
out << "+i" << c.imag << endl;
return out;

istream & operator >> (istream &in, Complex &c)
cout << "Enter Real Part ";
in >> c.real;
cout << "Enter Imagenory Part ";
in >> c.imag;
return in;

int main()
Complex c1;
cin >> c1;
cout << "The complex object is ";
cout << c1;
return 0;
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store