【C++】流插入和流提取重载

发布时间:2024年01月06日

目录

一、流插入和流提取

1、内置类型

??2、自定义类型

1)将自定义类型的重载写进ostream里面去。

2)自己重载。(重要)

二、内联函数


一、流插入和流提取

1、内置类型

在日期类里面,我们发现每次打印都需要使用 Print() 函数,能不能使用像内置类型一样使用"<<"符号呢?但是当我们使用时,会发现编译器不能通过,但是内置类型可以通过,还可以自动识别数据的类型。

?为什么内置类型可以直接使用,自定义类型不行呢?

?【答案】C++的流插入运算符“<>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对“<>”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据。因此,凡是用“cout<>”对标准类型数据进行输入输出的,都要用#include 把头文件包含到本程序文件中。赋值是“天选之子”,会自动生成。

用户自己定义的类型的数据,是不能直接用“<>”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,必须对它们重载。

??为什么内置类型可以自动识别类型呢?

?【答案】面对不同类型的数据调用不同的函数,ostream对内置类型默认都进行了支持。即库里面已经写好了,通过函数重载识别不同类型。

?2、自定义类型

?自定义类型的重载有两个方法:

1)将自定义类型的重载写进ostream里面去。

但ostream是库的,不能随便修改。那我们就选择第二种方法。

2)自己重载。(重要)

① 把operator<<作为成员函数,按照内置类型的引用方式使用,报错。

②运算符重载时,第一个参数是做操作数,第二个参数是右操作数。?this指针会占用第一个参数。调用时与使用习惯(cout作为左参数,对象作为右参数)不符。

③ 将operator作为全局函数,把cout作为第一个参数,日期类作为第二个参数。

但又面临一个新的问题,无法访问私有。

有两种解决方法:

a、将私有改为公有.(不推荐)

b、使用友元函数。

④流提取跟流插入的重载是类似的

二、内联函数

成员函数如果在类中定义,编译器可能会将其当成内联函数处理?。即声明和定义都放在类中。

在类外可以用inline声明:

内联没有地址,也不会进符号表。内联函数不能声明和定义分离,在引用函数时,直接 call 函数的地址使用,不需要链接;当声明和定义分离时,call 函数,但是只有定义,然后再符号表里面链接上定义使用。

因此,短小函数适合做内联的函数,可以直接是在类里面定义。

文章来源:https://blog.csdn.net/Dawn_Lillian/article/details/135317864
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。