第九部分思维导图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
      • 与标准错误输出设备相联接(缓冲方式)
        • 显示终端

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();
  • 流对象就使文件对象的化身

9.3.2 几个典型流成员函数

  • 1、输出流的open函数

    • 原型void open(char const*, int filemode, int = filebuf::openprot);
  • 2、输入流类的open函数

  • 3、close成员函数
  • 4、错误处理函数
最后修改日期:十一月 5, 2019

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。