C++流插入和流提取运算符的重载

 — 1 —
<< 运算符的重载

创新互联长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为东兰企业提供专业的网站设计、成都网站制作,东兰网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

C++ 在输出内容时,最常用的方式:

 
 
 
 
  1. std::cout << 1 <<"hello";

提出问题:

  •  那这条语句为什么能成立呢?
  •  cout 是什么?为什么 << 运算符能用在 cout 上呢?

原因:

  •  实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。
  •  << 能够用在 cout 上是因为,在 ostream 类对 << 进行了重载。

对于如下这条语句:

 
 
 
 
  1. std::cout << 1 <<"hello";

有可能按以下的方式重载成 ostream 类的成员函数:

 
 
 
 
  1. ostream & ostream::operator<<(int n) 
  2.     .... // 输出n整型的代码 
  3.     return *this; 
  4. ostream & ostream::operator<<(const char * s) 
  5.     .... // 输出s字符串的代码 
  6.     return *this; 
  7. }

那么在使用流插入<<运算符时,等价于的形式如下:

01 数据类型是int类型时:

 
 
 
 
  1. std::cout << 1;

上面的语句,等价于:

 
 
 
 
  1. cout.operator<<(1);

02 数据类型是字符串类型时:

 
 
 
 
  1. std::cout << "hello";

上面的语句,等价于:

 
 
 
 
  1. cout.operator<<("hello");

03 数据类型组合使用时:

 
 
 
 
  1. std::cout << 1 <<"hello";

上面的语句,等价于:

 
 
 
 
  1. ( cout.operator<<(1) ).operator<<("hello");

假定我们要想把某个对象里的内容进行打印输出,那么我们可以重载 ostream 类的流插入 << 运算符。

下面以 CStudent 类作为例子:

输出结果:

 
 
 
 
  1. 1,20,小林coding

需要注意:

 
 
 
 
  1. ostream & operator<<(ostream & o, const CStudent & s)

函数是全局的,所以函数的第一个参数必须要传入 ostream 的对象,并且 CStudent 类需要将此函数声明成友元函数,使得函数可以访问 CStudent 类的私有成员变量。

— 2 —

>> 运算符的重载

还是以 CStudent 类作为例子,假设想通过键盘的输入的内容,来初始化对象,则我们可以重载 istream 类的流提取 >> 运算符。

输入内容和输出内容:

 
 
 
 
  1. // 输入内容: 
  2. 1,20,小林coding 
  3. // 输出内容: 
  4. 1,20,小林coding

— 3 —

小结

要想流插入 << 运算符和流提取 >> 运算符能针对自定义的对象,那么我们就需要重载针对该对象的 ostream 类的 << 运算符 和 istream 的 >> 运算符,并且只能重载成全局的函数。

然后在 CStudent 类里需要把上面的两个重载函数声明成友元函数,使得两个重载的函数可以访问和赋值 CStudent 类里的私有成员函数。

网页题目:C++流插入和流提取运算符的重载
网页链接:http://www.shufengxianlan.com/qtweb/news18/32368.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联