博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
流运算符的重载
阅读量:5332 次
发布时间:2019-06-14

本文共 1373 字,大约阅读时间需要 4 分钟。

1.cout 是在iostream 中定义的,是ostream的对象

ostream& ostream::operator<<(int n){    //    return *this;}ostream& ostream::operator<<(const char* s){    //    return *this;}

2.类似Java中重写String方法一样,C++中一般重载“<<”运算符,一般为重载为全局函数

Because:

对输出运算符的重载

void operator<<(ostream& out) {    out << _year << "-" << _month << "-" << _day << endl;

会出现一个问题,只能写成

d<

因为函数的第一个参数是this指针,第二个参数才是我们传进去的 out,但是这与std中的cout使用习惯完全不符,我们的所打印变量是应该在cout的右边,如

cout<
<

这样的重载和普通的函数没有两样,也就失去了重载函数的目的所在。

那么这样,我们便不可以把输出运算符的重载写成成员函数,写成成员函数去实现功能,能实现功能 但失去重载本身的意义。

那么我们在类外写重载函数,此时输出运算符的重载函数是一个全局的。

 3.例子

#include 
#include
#include
#include
using namespace std;class Complex{private: double real; double imag;public: Complex(double r=0.0,double i=0.0):real(r),imag(i){} friend ostream& operator<<(ostream & os,const Complex& c); friend istream& operator>>(istream & is,const Complex& c);//起到声明friend作用,为全局函数做准备};ostream& operator<<(ostream& os,const Complex& c){ os<
<<'+'<
<<'i'; return os;}iostream& operator>>(iostream& is,const Complex& c){ string s; is>>s; int pos=s.find("+",0); string sTmp=s.substr(0,pos); c.real=atof(sTmp.c_str()); sTmp=s.substr(pos+1,s.length()-pos-2); c.imag=atof(sTmp.c_str()); return is;}

 

转载于:https://www.cnblogs.com/-Asurada-/p/10674249.html

你可能感兴趣的文章
织梦万能调用LOOP标签!
查看>>
Microsoft 官网 socket异步
查看>>
asp.net MVC helper 和自定义函数@functions小结
查看>>
L1-Day34
查看>>
Linux主机在LNMP环境中同时运行多个PHP版本
查看>>
玩转Xcode之修改系统生成的注释模板
查看>>
8、二进制中1的个数------------>剑指offer系列
查看>>
深入理解JavaScript系列(13):This? Yes,this!
查看>>
免费素材下载:一套超棒的免费UI套件
查看>>
jmeter中如何使用csv文件并读取数据
查看>>
ASP.NET MVC随记汇总
查看>>
Oracle查询经典
查看>>
$.ajax()方法详解
查看>>
一个view相对于屏幕或者另外一个view 的坐标
查看>>
典型系统~秒杀系统架构优化思路(转)
查看>>
codeforces 710C C. Magic Odd Square(构造)
查看>>
Node.js的UnitTest单元测试
查看>>
互联网业务安全实战
查看>>
[ Servlet / JSP ] J2EE Web Application 中的 JSESSIONID 是什么?
查看>>
MySQL thread pool【转】
查看>>