- 虚函数是在类中的函数头前加上虚virtual关键词的函数,
- 是为了加入虚函数表中
- 使子类可以通过子类指针调用与父类虚函数同名同类型的函数
纯虚函数是父类函数中内容无意义时,不需要显化式,直接将虚函数等于0
- 因为在父子类中都存在创建堆区空间,但后续delete无法将空间全部回收,所以在基类中使用虚析构函数来防止空间泄漏
- Const修饰过的变量初始化不能直接修改,可以通过程序员手动修改,或者通过指针间接修改,state修饰过的变量初始化可以直接修改或者手动初始化,因为state修饰过的成员已经开辟过空间且在程序结束前都会保留,但使用前需要声明。
- 指针和引用的区别
- 指针指向的是变量的地址,而引用是变量本身;
- 符号不同,指针使用的是*号,引用使用的是&号;
- 指针的大小根据操作系统的不同,大小不一样,在64位操作系统中是8字节,引用的大小为引用该变量的数据类型大小
- 有多级指针,没有多级引用。
- 指针占用内存空间,引用不占用内存空间
- 引用时必须初始化,指针可以不在新建时初始化
- 指针可以指向空,引用不行
- 引用的变量不能重新引用,指针可以重新指向新地址
- new和malloc的区别
- New可以连续申请堆区空间,malloc只能一个一个申请
- New申请空间时不需要输入大小,malloc需要输入申请者的占用大小
- New需要申请的长度,malloc不需要
- New可以直接在初始化的时候申请空间,malloc不行
- New只能申请整块空间(空间必须连续),malloc可以申请分散的空间
- 因为在父子类中都存在创建堆区空间,但后续delete无法将父子空间中的堆区空间全部回收,为了避免空间泄漏所以在基类中使用虚析构函数
- 栈区、堆区、全局/静态变量存储区、常量区、代码区
- 顺序表增O(n)删O(n)改O(1)查(排序后的时间复杂度)O(1)
空间复杂度O(n)
链表增O(1)删O(1)改O(n)查O(n)
空间复杂度O(n)
栈 访问O(n) 查O(n) 推入O(1) 弹出O(1)
空间复杂度O(n)
队列 访问O(n) 查O(n) 入队O(1) 出队O(1)
空间复杂度O(n)
二叉树 增删改查O(h),h为树高
空间复杂度O(n)
平衡树:增O(log n)删O(log n)改O(log n)查O(log n)最坏情况都是O(n)
空间复杂度O(n)