1. 向量线性相关的集合意义?
- 线性相关->向量共面->存在部分向量对空间维度没有贡献;
- 矩阵 AX=0 存在非零解,矩阵的质小于矩阵的维度。
2. 继承关系中析构函数的执行顺序?
- 构造顺序:先构造基类,然后构造派生类;
- 析构顺序:先析构派生类,然后析构基类;
- 包含虚函数的析构特殊情况:
- 基类指针指向派生类的时候,删除基类指针,如果基类析构函数不是虚函数,只能析构基类,不能析构派生类;
3. 构造函数可以是虚函数吗?
- 不可以
- 对象构造需要对vptr初始化,此时虚函数表还没有构建,没有办法初始化;
- 虚函数的作用在于通过父类的指针或者引用来调用它的时候可以变成调用子类的那个成员函数。而构造函数是在创建对象时自己主动调用的,不需要通过父类的指针或者引用去调用;
4. 智能指针:
- 背景:智能指针在适当的时间通过适当的方式来销毁对象,以避免出现资源泄露的行为;
- 构造:
- 实现智能指针:
5. 强制类型转换:
- 背景:C++ 引入新的强制类型转换机制,主要是为了克服C语言强制类型转换的以下缺点:
- 转换太过随意,可以在任意类型之间转换。
- 没有统一的关键字和标示符。对于大型系统,做代码排查时容易遗漏和忽略
- static_cast
- 没有运⾏时类型检查来保证转换的安全性;
- 进⾏上⾏转换(把派⽣类的指针或引⽤转换成基类表⽰)是安全的 进⾏下⾏转换(把基类的指针或引⽤转换为派⽣类表⽰),由于没有动态类型检查,所以是 不安全的;
- ⽤于基本数据类型之间的转换,如把int转换成char;
- 把任何类型的表达式转换成void类型;
- dynamic_cast
- 安全的进行下行转换,dynamic本⾝只能⽤于存在虚函数的⽗⼦关系的强制类型转换;对于指针,转换失败则返回 nullptr,对于引⽤,转换失败会抛出异常
- const_cast
- 常量指针转换为⾮常量指针,并且仍然指向原来的对象。常量引⽤被转换为⾮常量引⽤,并 且仍然指向原来的对象。去掉类型的const或volatile属性
- reinterpret_cast
- 可以将整型转换为指针,也可以把指针转换为数组;可以在指针和引⽤⾥进⾏肆⽆忌惮的转 换,平台移植性⽐价差