c/c++经典面试题(new,delete,malloc,多态,虚函数,纯虚函数)

非科班出身面试简直受太大打击,记录一下被问到的题目,后面争取能答出来。
一、new/delete,malloc/free区别
1、属性
new、delete是c++的关键字,malloc/free是标准库函数,需要include头文件。

2、参数
new操作符申请内存时无需指定内存块的大小,编译器会根据类型自行计算,malloc需要指出所需的内存尺寸。malloc面向内存空间,开辟的大小需要进行指定,new面向对象,根据数据类型自动计算空间,并且调用构造函数生成对象。

3、返回值
new操作符内存分配成功时,返回一个对象类型的指针,类型与对象严格匹配,无需进行类型转换,符合安全性要求,而malloc内存分配成功返回void *,需要强制类型转换将其转换为对应类型。

4、分配失败
new分配失败会抛出异常,bad_alloc。malloc分配失败返回NULL

5、重载
cpp允许重载new/delete操作符,new不需要为对象分配内存,指定一个地址作为内存起始的区域,new在这段内存上调用构造函数完成初始化,并返回此地址,malloc不允许重载。

6、内存区域
new操作符和malloc从堆上动态分配内存空间,堆是操作系统中的术语,是操作系统维护的一块特殊内存,用于程序的内存动态分配,C使用malloc从堆上分配内存,使用free释放已分配的内存,new配合delete使用,new[]配合delete[]使用。

7、消亡
malloc/free无法满足动态对象要求,对象要求在创建时自动执行构造函数,消亡时自动执行析构函数,由于malloc/free是库函数不是操作符,不在编译器权限内,不能把构造函数和析构函数加于malloc\free,而new/delete可以。

8、malloc
malloc申请的是虚拟空间之后由操作系统对申请的虚拟空间赋予实际的物理内存地址,由操作系统建立虚拟内存和物理内存的映射关系,因此malloc可以申请比物理内存更大的内存块,在windows环境中malloc中可以申请到的最大的虚拟内存约为1.9G,具体受到操作系统,动态库,程序本身等因素影响。malloc申请内存的输入数据类型为unsigned。

malloc的底层实现由brk和mmap实现(系统调用),小于128kb用brk分配,大于128kb用mmap分配。

二、c++特性
封装,继承,多态,
多态的详细介绍,虚函数,纯虚函数。
多态实现的3个必要条件:一定要有继承,要有方法的重写,需要父类指针指向子类对象。
多态:是对于不同对象接受相同消息产生不同的动作,c++多态性表现在运行和编译两个方面,在程序运行时多态通过继承和虚函数来体现,在程序编译时多态性体现在函数和运算符重载上。重载多态(函数和运算符重载),强制重载(类型强制转换),类型参数化多态(模板)

虚函数:在基类中以virtual 关键字冠名的成员函数,他提供了一种接口,允许派生类中对基类的虚函数重新定义。

虚函数的作用:在基类中为派生类保留一个函数名字,以便派生类对齐重新定义。作为接口存在的纯虚函数不具备函数功能,一般不能直接调用。

从基类继承来的纯虚函数,在派生类中仍然是虚函数,如果一个类中至少有一个纯虚函数,这个类被称为抽象类。抽象类中不仅包括纯虚函数,也包括虚函数,抽象类必须用作派生其他类的基类,而不能用于直接创建对象实例,但扔可以使用指向抽象类的指针智齿运行时多态性。

三、数组的实质存储方式
无论普通数组还是动态数组都会分为两部分存储,第一部分为数组的引用变量——栈内存,另一部分存放数组的实际数据值——堆内存。

四、拷贝构造函数的调用(三种情况)

1、用类的一个对象去初始化另一个类对象。
2、函数值传递时,会拷贝副本,产生拷贝构造,而引用则不会。
3、函数返回值为类对象或者引用。

五、典型的一种错误

void demo(){
	double num1,num2;
	...
	if (num1==num2) // wrong double 精度有小数部分,不能用等号判断
	...
	double dis=1e-6;
	if (num1 - num2 < dis)//right 设置一个误差范围,差值在范围内,认为相等。
	...
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值