C++ 流插入和流提取运算符的重载
01 流插入<<运算符的重载
C++ 在输出内容时,最常用的方式:
问题:
那这条语句为什么能成立呢?
cout
是什么?"<<
" 运算符能用在cout
上呢?
原因:
实际上,
cout
是在iostream
头文件中定义的ostream
类的对象。"
<<
" 能够用在cout
上是因为,在ostream
类对 "<<
" 进行了重载。
对于std::cout << 1 <<"hello";
这条语句,有可能按以下的方式重载成 ostream
类的成员函数:
std::cout << 1;
语句,等价于cout.operator<<(1);
std::cout << "hello";
语句,等价于cout.operator<<("hello");
std::cout << 1 <<"hello";
语句,等价于( cout.operator<<(1) ).operator<<("hello");
02 流插入<<运算符重载的例子
假定我们要想把某个对象里的内容进行打印输出,那么我们可以重载 ostream
类的流插入 <<
运算符。
下面以 CStudent
类作为例子:
输出结果:
需要注意是 ostream & operator<<(ostream & o, const CStudent & s)
函数是全局的,所以函数的第一个参数必须要传入 ostream
的对象,并且 CStudent
类需要将此函数声明成**友元函数**,使得函数可以访问 CStudent
类的私有成员变量。
03 流提取>>运算符重载的例子
还是以 CStudent
类作为例子,假设想通过键盘的输入的内容,来初始化对象,则我们可以重载 istream
类的流提取 >>
运算符。
输入内容和输出内容:
04 小结
要想流插入 <<
运算符和流提取 >>
运算符能针对自定义的对象,那么我们就需要**重载**针对该对象的 ostream
类的 <<
运算符 和 istream
的 >>
运算符,并且只能重载成全局的函数,然后在 CStudent
类里需要把上面的两个重载函数声明成友元函数,使得两个重载的函数可以访问和赋值 CStudent
类里的私有成员函数。
版权声明: 本文为 InfoQ 作者【小林coding】的原创文章。
原文链接:【http://xie.infoq.cn/article/8bc006a5fa9e3f757c44d52b3】。文章转载请联系作者。
评论