运算符重载(2)———流运算符重载函数
来源:互联网 发布:阿里云 发邮件 编辑:程序博客网 时间:2024/06/05 09:32
流插入运算符 <<
class Coordinate{friend ostream& opeartor<<(ostream &out,const Coordinate &coor);public: Coordinate(int x,int y){m_iX=x,m_iY=y;}private: int m_iX; int m_iY;};
friend ostream& opeartor<<(ostream &out,const Coordinate &coor){ out<<coor.m_iX<<" "<<coor.m_iY; return out;}
int main(){ Coordinate coor1(3,5); cout<<coor1; //operator<<(cout,coor1) return 0;}
流提取运算符 >>
class Coordinate{friend ostream& opeartor>>(istream &out,const Coordinate &coor);public: Coordinate(int x,int y){m_iX=x,m_iY=y;}private: int m_iX; int m_iY;};
friend ostream& opeartor>>(istream &in,const Coordinate &coor){ in>>coor.m_iX>>coor.m_iY; return in;}
int main(){ Coordinate coor2(3,5); in>>coor2; //operator<<(in,coor2) return 0;}
大家可能已经注意到了上面的重载函数都是用的类外友元函数,而不能是成员函数,原因是流插入和流提取的重载函数形式如下:
ostream & opeartor >>(ostream& ,自定义类&);istream & opeartor <<(istream& ,自定义类&);
可以看到流运算符重载函数的第一个参数必须是流类型的(ostream/istream),而我们之前说过成员函数的第一个参数本质上其实是类本身,因此冲突,只能用类外友元函数来重载。
然后,来解释一下“>>“重载函数的最后一行
return out;
先说作用是:保持输出流的现状从而能够连续输出。
假如重载之后有这样一条语句:
cout<<c1<<c2; //c1,c2是对象
先处理前面的cout<
(cout<<c1)<<c2;
由于重载函数最后的返回值类型是ostreams,所以前面的结果
结果是新的流对象cout(新),然后再执行
cout(新)<<c2;
这也就解释了为什么C++规定流运算符重载函数的第一个参数必须是流类型的(ostream/istream),就是为了能返回cout的当前值以便连续输出。
“<<“的重载函数同理,不再赘述。
阅读全文
0 0
- 运算符重载(2)———流运算符重载函数
- C++运算符重载——重载二元运算符
- 函数 运算符 重载
- 函数 运算符 重载
- 运算符重载函数
- 运算符(+ /*)的重载——友元函数
- 详谈面向对象的重载——>“函数重载”与“运算符重载”
- 重载“流提取运算符—— >> ”
- Python——运算符重载(2)
- 运算符重载的函数(2)
- 第八周——重载运算符——项目一(2)利用友元函数实现+-*/重载
- C++函数重载运算符重载
- 运算符重载(重载为普通函数)
- 运算符重载(重载为成员函数)
- C++重载函数与重载运算符
- 函数重载与运算符重载
- 【C++】重载运算符和重载函数
- 23-24.重载运算符,重载函数。
- LeetCode Trie树(前缀树)
- Java8 重新认识HashMap
- 利用词间语义先验关系提升词嵌入表示
- c++字符串流
- SDUT 3916 上色的纱雾
- 运算符重载(2)———流运算符重载函数
- LeetCode 17. Letter Combinations of a Phone Number 递归回溯法
- C#的Socket编程
- Javascript 鼠标点击冒泡特效
- Cocos2d 使用shader创建圆角图片,以及添加投影
- 使用RTL-SDR和Matlab Simulink玩转软件无线电(一)
- ubuntu14.04安装spyder
- 金蝶EAS8.2,WAF2,F7数据过滤(单据头、分录均有F7字段)
- ANGULAR JS WATCH监听使用