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

<<运算符的重载

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

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

提出问题:

  • 那这条语句为什么能成立呢?

  • cout 是什么?为什么 << 运算符能用在 cout 上呢?

原因:

  • 实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。

  • << 能够用在 cout 上是因为,在 ostream 类对 << 进行了重载。

对于如下这条语句:

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

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

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

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

01 数据类型是int类型时:

std::cout << 1;

上面的语句,等价于:

cout.operator<<(1);

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

std::cout << "hello";

上面的语句,等价于:

cout.operator<<("hello");

03 数据类型组合使用时:

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

上面的语句,等价于:

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

— —

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

下面以 CStudent 类作为例子:

输出结果:

1,20,小林coding

需要注意:

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

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

>>运算符的重载

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

输入内容和输出内容:

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

小结

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

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

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
重载插入运算符(<<)和提取运算符(>>)是C++中常见的运算符重载操作。插入运算符用于将对象的数据成员插入到输出中,提取运算符则用于从输入提取数据,并将其赋值给对象的数据成员。 下面是一个示例代码,演示如何重载插入运算符提取运算符: ```c++ #include <iostream> #include <string> using namespace std; class Person { public: string name; int age; friend ostream& operator<<(ostream& os, const Person& p) { os << "Name: " << p.name << ", Age: " << p.age; return os; } friend istream& operator>>(istream& is, Person& p) { cout << "Enter name: "; is >> p.name; cout << "Enter age: "; is >> p.age; return is; } }; int main() { Person p1; cin >> p1; cout << p1 << endl; return 0; } ``` 在上面的代码中,我们定义了一个名为Person的,并在其中重载插入运算符提取运算符插入运算符使用了友元函数的形式,接受一个输出和一个常量引用的Person对象作为参数,并将对象的数据成员写入输出中,最后返回输出提取运算符同样使用了友元函数的形式,接受一个输入和一个Person对象的引用作为参数,并从输入中读取数据,将其分别赋值给对象的数据成员,最后返回输入。 在主函数中,我们创建了一个Person对象p1,并使用提取运算符从标准输入中读取数据并赋值给p1的数据成员。随后,我们又使用重载插入运算符将p1对象的数据成员输出到标准输出中。 需要注意的是,上面的代码中使用了友元函数重载运算符。这是因为运算符本质上是对对象进行操作,而不是对中的成员函数进行操作。因此,为了能够访问对象的私有成员,我们需要使用友元函数实现运算符重载

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值