杂项:虚析构函数、纯虚数、Lambda表达式、异常处理、文件相关操作、模板函数,面试题

1.什么是虚函数?什么是纯虚函数?

虚函数:在函数名前加上virtual关键词修饰的函数是虚函数,在其后代类中被重写之后,可以实现多态特性,定义时会生成虚函数指针和虚函数列表,使用时会用虚指针遍历虚函数列表找到对应的虚函数,实现不同功能
纯虚函数:在虚函数的函数的函数体内不写或者无法写执行语句的函数,在函数末尾加上=0表示函数没有实现,需要注意的是,在继承其的子类中需要重写该虚函数

2.基类为什么需要虚析构函数?

在父指针实例化对象后,执行完操作释放父指针时,因为父指针作用域只有父类,所以只会析构父类,派生类的成员(子类自己的成员)无法释放,造成资源泄露,析构函数很好的避免了这一点,在析构时,能够正确释放空间。

3.如何正确初始化const和static数据成员?

const 数据成员要在类的构造函数中进行初始化,不能在类内部直接赋值。

static 数据成员要在类外进行定义和初始化。可以在类内部声明,但必须在类外提供定义。

4.指针和引用的区别?

1.初始化:定义引用时,必须进行初始化,而定义指针时可以不用初始化

2.标识符:引用定义时标识符是&,而指针定义时的标识符是*

3.值改变:引用一旦指定目标后,不能进行修改了,指针可以更改指向

4.是否可以为空:没有空引用,但是可以有空指针

5.使用方式:引用的使用与目标一致,指针的使用需要使用 *运算符

6.内存:引用不占内存空间,指针需要占内存空间(4/8)

7.多级:没有多级引用,但是有多级指针

8.本身:引用就是目标本身,指针记录的是目标的起始地址

9.值改变:引用在进行值改变时,就是对目标进行的值改变, 而指针的值改变,就是偏移地址(危险操作)

5.new和malloc的区别?

1.空间:malloc属于函数调用需开辟空间,new属于关键字不需要开辟空间

2.空间是否连续:malloc申请空间时,没有单个和连续空间的区别,而new申请时分单个和连续空间的操作

3.大小:malloc需要手动计算申请空间大小,new由系统自动计算

4.初始化:malloc申请空间时不可以可以给空间进行初始化,而new可以

5.返回值:malloc的返回值是void*类型,使用是需要强制转换,new不需要,类型与目标相同

6.内存泄漏是怎么产生的?如何避免?

内存释放时,没有释放该部分的内存,但是该内存下的程序已经结束,所以再也无法访问这部分内存,导致内存缩水。

使用异常处理函数抛出异常,及时处理问题

7.c++的内存分区

                内核空间                

                栈空间                (函数运行空间,局部变量)

                堆空间                (指针空间)

数        |        .bss                (未初始化的全局变量,static修饰的变量)

据        |        .data              (已初始化的全局变量,static修饰的变量)

区        |        .ro                  (const修饰的常量和变量)

            |        .text               (文本、代码段)

         
8.常用数据结构有哪些?时间复杂度和空间复杂度如何使用

堆、栈、队、链、二叉树、哈希表

                时间复杂度                   空间复杂度                

堆 :              O(1)                               O(n)                                         

栈:               O(n)                               O(n)                

队:               O(n)                               O(n)               

链:               O(n)                               O(n)                 

二叉树:       O(log n)(最优)                O(n)               
哈希表:        O(1)(最优)                     O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值