流插入运算符为什么要被重载为全局函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流插入运算符为什么要被重载为全局函数?相关的知识,希望对你有一定的参考价值。
Part 1. 流插入运算符的重载:
cout<<5<<endl;
cout是在iosream中定义的一个ostream对象
iostream中对“<<”进行了重载。 cout<<5; 即 cout.operator<<(5);
iostream中对"<<"的重载函数:
ostream & ostream::operator<<(int n){ ……//输出n的代码 return *this; // *this 就是cout }
Part 2. 流插入运算符为什么要被重载为全局函数
假设有Complex对象c, 如果要用cout<<c来输出, 就要对“<<“重载。
但是1)不能在ostream类中对"<<"重载,因为ostream类已经被封装好了。
2)不能在Complex类中对"<<"重载,否则*this对象会混淆。
class Complex { public: int a,b; }; ostream &operator<<(ostream &os, Complex &x){ //cout<<x<<endl; os<<x.a<<"+i"<<x.b; // the "os<<x.a" is os.operator<<(x.a); // and in the definition of os.operator<<(), it should returned *this // which represents a ostream object return os; }
以上是关于流插入运算符为什么要被重载为全局函数?的主要内容,如果未能解决你的问题,请参考以下文章