Files
BasicsOfComputerSoftwareEng…/OOP/Final.md
2023-06-04 00:13:46 +08:00

6.1 KiB
Raw Blame History

程设复习!

  1. 面向对象程序设计有四(三)个主要特点:(抽象)、封装、继承、多态。

  2. 成员函数可访问本类(对象)中任何成员(私有和公有);

  3. “<<”和“>>”还可用于自定义类型数据,必须在程序中对“<<”和“>>”进行重载,并申明为类的友元。

  4. cout流中插入一个endl时,终止一行字符串并刷新缓冲区;当插入ends时,终止字符串并插入空格。

  5. 使用控制符控制输出格式:在头文件iomanip中定义。

  6. 输入输出流的控制符

    控制符 作用
    dec 设置整数的基数为 10
    hex 设置整数的基数为 16
    oct 设置整数的基数为 8
    setbase(n) 设置整数的基数为nn只能为 8 10 16 三者之一
    setfill(c) 设置填充字符cc可以是字符常量或字符变量
    setpresision(n) 设置实数的精度为n位。
    setw(n) 设置字段宽度为n
    resetioflags() 终止已经设定的输出格式状态,在括号中应指定内容。
    流成员函数 与之作用相同的控制符
    precision(n) setprecision(n)
    width(n) setw(n)
    fill(c) setfill(c)
    setf() setiosflags()
    unsetf() resetioflags()
  7. cin.get()的三种重载:

    • cin.get()返回读入的一个字符,若读入的是文件结束,返回EOF
    • cin.get(char ch)将读入的字符存入ch变量中。
    • cin.get(char *buffer, int size, char end)从输入流中读取size - 1个字符(即算上\0后一共存储了size个字符),如果遇到指定的终止字符end则提前结束读取。读取成功返回非零值失败返回0。不会将终止符保存在数组中但是会把终止符仍保留在输入流中。用cin.ignore()将其去除。
  8. cin.getline(char *buffer, int size, char end)与三个参数的cin.get()类似,但是会将结束符从流中删除,也不保存在数组中。如果读入size - 1个字符没有遇到结束符则会清空缓冲区。

  9. eof()EOF则返回true(非零值),不在则是false0

  10. cin.peek()返回当前指针指向的字符,但不移动指针,也不从流中删除字符。cin.putback(char ch)ch插入到当前指针的位置。

  11. 派生类对象可以转换为一个基类对象,反之是不行的。

  12. 多态性的分类:

    • 重载多态:函数/运算符重载;
    • 强制多态:数据或对象的类型强制转换;
    • 包含多态:类族中定义同名成员函数的多态行为;
    • 参数多态:类模版实例化时的多态性。

    多态性实现方式的分类:

    • 静态多态性:编译时多态性
    • 动态多态性:运行时多态性
  13. 函数重载与同名覆盖的区别:

    • 函数重载:函数名相同但是参数不同
    • 同名覆盖:在类族中,不同层次可能出现名字、参数个数和类型都相同而功能不同的函数。
  14. 最好将基类的析构函数声明为虚函数以确保申请的内存被正确地释放。

  15. 文件输入输出方式

    方式 作用
    ios::in 以输入的方式打开文件
    ios::out 以输出的方式打开文件(默认清空内容)
    ios::app 输出的方式打开,写入的数据添加在文件末尾
    ios::ate 打开文件,指针指向文件末尾
    ios::trunc 打开一个文件,如果已存在文件,则清空内容;如果不存在文件,则创建新的
    ios::binary 以二进制方式打开文件
    ios::nocreate 不创建新文件,如果文件不存在,打开失败
    ios::noreplace 如果文件不存在,创建新文件;如果文件存在,打开失败
  16. 打开文件:

    fstream fl("filename.txt", ios::out);
    

    fstream fl;
    fl.open("filename.txt", ios::out);
    

    关闭文件:

    fl.close();
    
  17. seekg()是“seek get”用在ifstream的;seekp()是“seek put”用在ofstream的。

  18. 在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。

  19. 用参数初始化表可解决某个类中对象成员的初始化问题。

  20. className instance2(instance1);
    

    className instance2 = instance1;
    

    都调用拷贝构造函数;

    className instance2;
    instance2 = instance1;
    

    调用instance2operator=运算符重载。

  21. 函数指针:

    • 定义:
    returnType (className::*funcPtrName) ({arguments});
    
    • 赋值:
    *funcPtrName = &className::memberFunc;
    
    • 引用:
    (instanceName.*funcPtrName)({arguments});
    
  22. 各种const

    • const int numnum内容不能更改;
    • const int *numPtr:指向一个const int的指针;
    • int const *numPtr:一个const *,指向的地址不能变的指针。
  23. 类的常成员必须通过参数初始化列表赋值。

  24. 静态成员函数只能访问静态变量。没有this指针。

  25. 前置运算符的定义:

    className operator++();
    

    后置运算符的定义:

    className operator++(int);
    
  26. <<>>不能重载为成员函数,必须重载为友元函数。=[]()不能重载为友元函数,必须重载为类的成员函数。

  27. 重载的运算符保持其原有的操作数个数、结合性、优先级不变。