diff --git a/OOP/Final.md b/OOP/Final.md new file mode 100644 index 0000000..3f75b9d --- /dev/null +++ b/OOP/Final.md @@ -0,0 +1,116 @@ +# 程设复习! + +1. 面向对象程序设计有四(三)个主要特点:(抽象)、封装、继承、多态。 +2. 成员函数可访问本类(对象)中任何成员(私有和公有); +3. “<<”和“>>”还可用于自定义类型数据,必须在程序中对“<<”和“>>”进行重载,并申明为类的友元。 +4. 向`cout`流中插入一个`endl`时,终止一行字符串并刷新缓冲区;当插入`ends`时,终止字符串并插入空格。 +5. 使用控制符控制输出格式:在头文件`iomanip`中定义。 +6. 输入输出流的控制符 + + | 控制符 | 作用 | + | ---------------: | :------------------------------------------------- | + | `dec` | 设置整数的基数为 10 | + | `hex` | 设置整数的基数为 16 | + | `oct` | 设置整数的基数为 8 | + | `setbase(n)` | 设置整数的基数为`n`(`n`只能为 8, 10, 16 三者之一 | + | `setfill(c)` | 设置填充字符`c`,`c`可以是字符常量或字符变量 | + | `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 count, char end)`从输入流中读取`n - 1`个字符(即算上`\0`后一共存储了`n`个字符),如果遇到指定的终止字符`end`,则提前结束读取。读取成功返回非零值,失败返回0。不会将终止符保存在数组中,但是会把终止符仍保留在输入流中。用`cin.ignore()`将其去除。 +8. `cin.getline(char *buffer, int count, char end)`与三个参数的`cin.get()`类似,但是会将结束符从流中删除,也不保存在数组中。如果读入`n - 1`个字符没有遇到结束符则会清空缓冲区。 +9. `eof()`在`EOF`则返回`true`(非零值),不在则是`false`(0)。 +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. 打开文件: + ```c++ + fstream fl("filename.txt", ios::out); + ``` + 或 + ```c++ + fstream fl; + fl.open("filename.txt", ios::out); + ``` + 关闭文件: + ```c++ + fl.close(); + ``` +17. `seekg()`是“seek get”,用在`ifstream`的;`seekp()`是“seek put”,用在`ofstream`的。 +18. 在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。 +19. 用参数初始化表可解决某个类中对象成员的初始化问题。 +20. ```c++ + className instance2(instance1); + ``` + 和 + ```c++ + className instance2 = instance1; + ``` + 都调用拷贝构造函数; + ```c++ + className instance2; + instance2 = instance1; + ``` + 调用`instance2`的`operator=`运算符重载。 +21. 函数指针: + - 定义: + ```c++ + returnType (className::*funcPtrName) ({arguments}); + ``` + - 赋值: + ```c++ + *funcPtrName = &className::memberFunc; + ``` + - 引用: + ```c++ + (instanceName.*funcPtrName)({arguments}); + ``` +22. 各种`const`: + - `const int num`:`num`内容不能更改; + - `const int *numPtr`:指向一个`const int`的指针; + - `int const *numPtr`:一个`const *`,指向的地址不能变的指针。 +23. 类的常成员必须通过参数初始化列表赋值。 +24. 静态成员函数只能访问静态变量。没有`this`指针。 +25. 前置运算符的定义: + ```c++ + className operator++(); + ``` + 后置运算符的定义: + ```c++ + className operator++(int); + ``` +26. `<<`和`>>`不能重载为成员函数。`=`,`[]`,`()`不能重载为友元函数。 \ No newline at end of file