他妈的...
上机部分不能用自己的机器,学校提供的是VS2010和VC++6.0。他妈的VS2010不知道怎么回事写个std::cout都跑不起来,我只能拿VC++6.0写。说实话上古ide狗都不用,通篇cpp文件下来除了关键字是蓝色其他他妈的全是黑色,光是花在看自己代码有没有写错字都能花掉一半的时间,最后来不及还剩下半道题...
这个文档是2022.6.20东南大学C++期末复习课摘要,主要罗列了一些必要的考点,在src部分中是对本markdown提到的知识点的代码实例,有助于扫清一部分的知识盲区(当然考完发现了有一点点的遗漏,比如virtual函数碰到两次继承之类的)
- 构造函数析构函数调用顺序,和其他组合关系混在一起
- copy构造函数
- 传值传引用
- const
- 友元
-
this->var = var 或者标明类名 A::var = var 同名传参情况下
-
const type & var提高性能
-
静态数据成员
- 所有该类的实例共享一个数据成员,一般用来记录该类有多少个对象构造函数++析构函数-- 操作
- 类内部声明,类外部初始化,类外部可以不赋值但是一定要声明
-
构造 析构
- 全局对象 所有函数开始前 程序结束后
- 局部对象
- auto 定义时 块作用域结束时
- static 首次定义时 程序结束时
-
组合关系
-
类的对象作为另一个类的数据成员
-
显性调用初始化列表初始成员对象 除非有default构造函数可以不用初始化列表
-
先构造成员对象再自己,先自己再析构成员对象
-
-
copy构造函数
防止dead loop 关注何时会调用
传值会调用 传引用不会
值传递返回会调用,返回引用不会
如果返回值是临时对象或者局部对象不能返回引用(虚悬引用),只能返回值
如果成员变量有指针,则应提供copy构造函数并重载赋值运算符
指针不应该指向同一块区域,而应该是两块区域但是内容一致
-
静态存储区域 - 栈空间存储 - 堆空间存储
-
new & delete
-
classname * varname = new classname[length];
delete [] varname; //普通的类数组
-
classname ** varname = new classname*[length];
for varname[i] = new classname()
for delete [] varname[i]; //指针数组
-
要自定义析构函数去delete ptrs
-
-
何时用到初始化列表?4种方式ppt里面有
-
静态成员函数
可以视为对于一个类的服务,不能访问非静态数据成员
-
const成员函数
-
不能修改本对象的数据成员
-
不能调用其他的non-const成员函数
-
-
this指针级联调用 return *this 返回引用 应该不考
-
友元类和友元函数
-
友元函数可以访问该类所有数据成员
类内声明,类外定义
例如运算符重载
-
友元类
例如链表类和节点类?!
-
dangerous
-
重载为成员函数
要求运算左操作数必须是自己
()[]->必须
-
重载为全局函数
记得在类里面声明为友元函数
参数个数 = 目数
>>和<<必须
要定义为引用 istream& ostream&
-
同类型
拷贝构造函数 初始化对象
-
非同类型
转换构造函数
编译器隐式转换自动调用转换构造函数
隐式有时候很危险 声明为explicit
-
强制类型转换符重载
A::operater OtherClass() const;
//不需要返回值,不需要修改原对象 A$\rightarrow$ OtherClass调用的时候就是
static_cast<OtherClass>(Avar);
取决于是否有句柄
右值引用(C++11)
对不同的子类统一用基类指针,用基类的函数
使用方式:虚函数Virtual Function
动态绑定 两个条件
常常结合多态
若没有显式调用构造函数则要看有没有基类的dafault constructor
仅仅在派生的时候用得到
考试内容较多
#include
读istream对象
写oftream对象
相比普通文本文件(顺序文件),不需要对文件结构有了解
多给一个ios::binary
调用成员函数write和read进行写入和读取,不同于之前的<<和>>
write给一个buffer的地址和要写入的字节数,buffer可以是一个数组的地址
read同理
地址(指针)转换reinterpret_cast
sizeof()
栈展开以及里面的析构比较重要
发生异常到找到catch中间部分的对象都会被析构
throw - catch
new运算符的failure
- 容器和迭代器的定义和使用
- vector list deque序列式容器
- set multiset multimap关联式容器
- stack queue priority_queue容器适配器
- 函数模板可以直接调用
- 类模板需要先显性特化再创建对象
类模板实现动态数组,类模板允许类型实参和非类型实参
类模板成员函数的定义要和头文件写在一起!!!
- 包含继承关系与成员对象的 情况下构造函数和析构函数的调用顺序
- static数据成员和成员函数
- new运算符的处理 对象数组的构建
- 文件 异常处理 偏多
- 运算符重载 string的例子,针对用户自定义类型一般要重载哪些函数
- 临时对象
- STL模板类的使用 入stack 栈的压入和弹出操作
- 指针数组和二维指针
- 文件读写(顺序和二进制) 与对象的操作
- 异常处理和栈展开 异常处理的流程
- 多态的实现方式 调用方式 以及编程实现
- 临时对象的问题