前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C++ 流插入和流提取运算符的重载

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

作者头像
小林coding
发布2020-03-31 17:05:24
发布2020-03-31 17:05:24
1.1K00
代码可运行
举报
文章被收录于专栏:小林coding小林coding
运行总次数:0
代码可运行

1

<< 运算符的重载

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

代码语言:javascript
代码运行次数:0
运行
复制
std::cout << 1 <<"hello";

提出问题:

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

原因:

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

对于如下这条语句:

代码语言:javascript
代码运行次数:0
运行
复制
std::cout << 1 <<"hello";

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

代码语言:javascript
代码运行次数:0
运行
复制
ostream & ostream::operator<<(int n)
{
    .... // 输出n整型的代码
    return *this;
}

ostream & ostream::operator<<(const char * s)
{
    .... // 输出s字符串的代码
    return *this;
}

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

01 数据类型是int类型时:

代码语言:javascript
代码运行次数:0
运行
复制
std::cout << 1;

上面的语句,等价于:

代码语言:javascript
代码运行次数:0
运行
复制
cout.operator<<(1);

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

代码语言:javascript
代码运行次数:0
运行
复制
std::cout << "hello";

上面的语句,等价于:

代码语言:javascript
代码运行次数:0
运行
复制
cout.operator<<("hello");

03 数据类型组合使用时:

代码语言:javascript
代码运行次数:0
运行
复制
std::cout << 1 <<"hello";

上面的语句,等价于:

代码语言:javascript
代码运行次数:0
运行
复制
( cout.operator<<(1) ).operator<<("hello");

— —

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

下面以 CStudent 类作为例子:

输出结果:

代码语言:javascript
代码运行次数:0
运行
复制
1,20,小林coding

需要注意:

代码语言:javascript
代码运行次数:0
运行
复制
ostream & operator<<(ostream & o, const CStudent & s)

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


2

>> 运算符的重载

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

输入内容和输出内容:

代码语言:javascript
代码运行次数:0
运行
复制
// 输入内容:
1,20,小林coding

// 输出内容:
1,20,小林coding

3

小结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小林coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档