C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符

本文主要是介绍C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 总说明

输入输出运算符必须是非成员函数,否则他们左侧运算对象将是我们的类的一个对象,好比如下代码:

Sales_data data;
data << cout;
  • 由于IO操作通常需要读写类的非公有数据,所以输入输出运算符一般被声明为友元。
  • 输入运算符必须处理输入可能失败的情况,而输出运算符不需要。

2. 输出运算符<<

参数说明:

  • 第一个形参通常是一个非常量的ostream对象的引用。非常量是因为向流中写入会改变其状态;而引用是因为我们无法复制一个ostream对象。
  • 第二个形参是要打印类型的常量引用
  • 返回值是它的ostream形参。

eg.

ostream &operator<<(ostream &os,const Sales_data &item)
{os<<item.isbn()<<" "<<item.units_sold<<""<<item.revenue<<" "<<item.avg_price();return os;
}

注意:输出运算符应该主要负责打印对象的内容而非控制格式,输出运算符不应该打印换行符。

3. 输入运算符>>

参数说明:

  • 第一个形参通常是运算符将要读取的流的引用
  • 第二个形参是将要读取到的(非常量)对象的引用。
  • 返回值是它的istream形参。

eg.

istream &opertaor>>(istream &is,Sales_data &item)
{double price;// 不需要初始化,因为我们将先读入数据到`price`,之后才使用它is>>item.bookNo>>iten.units_sold>>price;//检查输入是否成功if(is){item.revenue=item.units_sold*price;}else{item=Sales_data(); //输入失败:对象呗赋予默认的状态}return is;
}

注意:

  • 当流含有错误类型的数据时,读取操作可能失败,且之后的其他使用都将失败
  • 当读取操作达到文件末尾或者遇到输入流的其它错误时,也会失败
  • 当读取操作发生错误时,输入运算符应该负责从错误中恢复。

这篇关于C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855314

相关文章

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指