第九部分思维导图PDF下载C++程序设计 第九章 运算符重载及流类库
![]()
9.1 运算符重载
9.1.1 重载对象的赋值预算符
- 运算符重载其实就使是函数重载
- “赋值函数”使用符号“operator=”表示,C++关键字“operator”和运算符一起使用就表示一个运算符函数,如
- “poerator+”表示重载“+”运算符
- 应将operator=从整体上视为一个(运算符)函数名
- 声明
- str& str operator = (str&);
- 定义
- str& str :: operator = (str& a)
- 声明
9.1.2 运算符重载的实质
- operator关键字和一个运算符连用,构成一个运算符函数。
- 各种运算符号+-*/依据不同的数据类型而具有不同意义,这就是运算符重载
- C++是由函数组成的,在C++内部,任何运算都是通过函数来实现的。例如
- operator+(5,2)会被C++视为对函数原型operator+(int, int)的调用。
- 类运算符
- 重载运算符作为类的成员函数
- 友元运算符
- 重载运算符作为类的友元函数
- 不能重载的运算符
- .
- ::
- *
- ?:
- 不是运算符
- sizeof
- #
- 只能用类运算符重载
- =
- ( )
- [ ]
- ->
- 只能用友元运算符
- >>
- <<
- 不能自己定义新的运算符,只能把C++原有的运算符有道自己设计的类上。
- 经过重载,运算符并不改变原有的优先级,也不改变所需的操作数数目
9.1.3 <<、>>和++运算符重载实例
- 如果运算符所需的操作数尤其是第一个操作数,希望进行隐式类型转换,则运算符应通过友元来重载。
- 如果一个运算符的操作需要修改类对象的状态,应当使用类运算符
-
插入符函数的一般形式
- ostream &operator << (ostream & output, 类名& 对象名)
- { …… //函数代码
- return output;
- }
- 提取符函数的一般形式
- istream &operator >> (istream & input, 类名 & 对象名)
- {…… //函数代码
- return input
- }
9.1.4 类运算符和友元运算符的区别
- 使用对象
- friend complex operator+(complex, complex);
- 使用引用
- friend complex operator+(complex&, complex&);
- 成员运算符比友元运算符少一个参数,因为成员函数具有this指针
9.1.5 下标运算符“[ ]”的重载
- 略
9.2 流类库
9.2.1 流类库的基础类
- C++中,输入输出是通过流来完成的
- 接受输出数据的地方叫做目标,输入数据来源的地方叫做源
- 执行输入和输出操作的类体系叫做流类,提供这个流类实现的系统库就叫做流类库
- 如果在多条继承路径上有一个汇合处,则称这个汇合处的基类为公共基类。
-
C++流类库预定义了4个流
- cin
- 与标准输入设备相联接
- 键盘
- 与标准输入设备相联接
- cout
- 与标准输出设备相联接
- 显示终端
- 与标准输出设备相联接
- cerr
- 与标准错误输出设备相联接(非缓冲方式)
- 显示终端
- 与标准错误输出设备相联接(非缓冲方式)
- clog
- 与标准错误输出设备相联接(缓冲方式)
- 显示终端
- 与标准错误输出设备相联接(缓冲方式)
- cin
9.2.2 默认输入输出格式控制
- 输入cin
- 对于单字符来讲,它将舍去空格,直到读到字符为止
- 对于字符串来讲,它从读到第一个字符开始,到空格结束
- 当键盘同时给一个单字符对象和一个字符串对象赋值时,不要先给字符串赋值,如果需要,应该强制使用结束符\0。
9.2.3 使用ios_base类
- ios_base类派生ios类,ios类又是istream类和ostream类的虚基类
9.3 文件流
9.3.1 使用文件流
- 输入文件流
- 需要定义ifstream类型对象
- 输出文件流
- 需要定义ofstream类型对象
- 输入输出文件流
- 需要定义fstream类型对象
- 对文件进行操作的方法
- 1、打开一个相应的文件流
- ofstream myStream;
- 2、把这个流和对象的文件关联起来
- myStream.open(“myText.txt”);
- 如果指定文件路径,路径中的“\”号必须使用转义字符表示,//
-
3、不再使用的文件及时关闭
- myStream.close();
- 1、打开一个相应的文件流
- 流对象就使文件对象的化身
9.3.2 几个典型流成员函数
-
1、输出流的open函数
- 原型void open(char const*, int filemode, int = filebuf::openprot);
-
2、输入流类的open函数
- 3、close成员函数
- 4、错误处理函数
留言