1.什么是虚函数,什么是纯虚函数
在类中定义函数时,在函数名前加virtual就是虚函数;虚函数能够保证,子父=类中只有一个该函数;当子函数中没有重写时,那么父子类中使用该函数都是父类中的该函数;当子类中重写时,那么父子 类中调用的就是子类重写的函数;如果当前类的函数设置成虚函数,那么该类的子类中该函数都是虚函数,即使没有加virtual;
类中的某些成员函数没有实现的意义,仅仅只是该类中应该拥有的功能但是想要在子类来重写后,使用父类指针或引用指向子类对象时来调用该重写的虚函数纯虚函数定义格式: 虚函数头 = 0;
包含纯虚函数的类,称为抽象类,抽象类是不能实例化对象的,如果在子类的中没有重写纯虚函数那么子类及其子类都是抽象类
2.基类为什么需要虚析构函数
如果基类的析构函数不是虚函数,当你通过基类指针删除派生类对象时,只会调用基类的析构函数,而不会调用派生类的析构函数。这可能导致派生类中分配的资源(如动态内存、文件句柄等)没有被正确释放,从而造成资源泄漏 。使用虚析构函数可以确保在删除对象时,析构函数的调用顺序是从派生类到基类。
3.如何初始化const和static修饰的数据成员
const 数据成员必须在构造函数的初始化列表中初始化,不能在构造函数体内赋值。static 数据成员在类内部声明,在类外部定义和初始化
4.指针和引用的区别
引用的符号是&,指针的符号是; 引用一旦使用就无法修改,而指针可以修改。;定义引用时必须初始化,而指针可以不初始化; 引用不可以是空引用,而指针可以是空指针;引用就是目标本身,而指针只是记录目标地址;引用不占用内存空间,而指针占用空间。
5.new和malloc的区别
new申请对象空间时,会自动调用该对象所在类中的构造函数,而malloc不会; malloc申请出的空间结果是void*类型,使用时需要根据具体的情况进行强转,而new申请空间时,申请什么类型的空间返回的就是什么类型的指针; new申请空间时可以给空间进行初始化,而malloc不可以; malloc\free申请空间时,没有单个和连续空间的区别,而new\delete申请时区分单个和连续空间的操作
6.内存泄露是什么导致,怎么避免
内存泄漏是由于动态分配的内存未被正确释放而导致的资源浪费,没有及时使用delete释放。
在并不需要使用该内存时,及时用delete释放内存;
7.c++的内存分区
堆区,栈区 数据区、代码区和常量区
9.常用的数据结构,如何使用空间复杂度和时间复杂度
数组,链表,栈,队列,哈希表,二叉树
时间复杂度衡量算法执行所需时间,反映算法的效率。空间复杂度衡量算法执行所需内存,反映算法的资源消耗。