关于重载流插入运算符和流提取运算符的问题

来源:互联网 发布:nginx 经典书籍 编辑:程序博客网 时间:2024/05/17 01:14

在C++编译系统中,其类库中提供输入流类istream和输出流类ostream,cin和cout分别是两个类的对象

重载两运算符格式如下:

istream & operator >> (istream &, 自定义类 &);

ostream & operator << (ostream &, 自定义类 &);

并且只能将其重载为友元函数,而不能作为自定义类的成员函数, 原因如下:

定义为成员函数,那么就隐含this指针了,你要知道重载其实也是一种函数,那么函数就有调用他的对象。如果是成员函数,那么调用他的对象就肯定是相对应的类对象了,

但是<<和>>调用的对象肯定只能是cout或者cin,那么就不能定义为成员函数了,只有定义成友元,那么就可以把cin,cout作为一个参数传进你重载的操作符函数里面去了。

如果一定要定义为成员函数,则代码示例如下:

ostream & operator<<(ostream &output){  return output;}
所以在运用这个<<运算符时就变为这种形式了:data<<cout; 这不符合人的习惯。
还有如何判断调用的是否是重载的流插入符还是预定义的流插入符。
int main(){Time T1;cout<<T1<<5<<endl;return 0;}
<<右侧如果为友元函数的自定义类,则为重载的流运算符,如果是标准类型的数据,那就是正常的预定义流运算符,这一点还要注意。




0 0