整理的C++面试题,大厂面试总遇到!

C++语言基础、语言特性、数据结构、操作系统知识甚至是一些内核相关的知识、网络相关知识、数据库操作、多线程多进程数据同步互斥、内存相关知识等等。

1.C中的malloc 和C++中的new 有什么区别

malloc 和new 有以下不同:
(1)new 、delete 是操作符,可以重载,只能在C++ 中使用。

(2 )malloc、free 是函数,可以覆盖,C、C++ 中都可以使用。

(3 )new 可以调用对象的构造函数,对应的delete 调用相应的析构函数。
(4 )malloc 仅仅分配内存,free 仅仅回收内存,并不执行构造和析构函数

(5)new 、delete 返回的是某种数据类型指针,malloc、free 返回的是void 指针。
注意:malloc 申请的内存空间要用free 释放,而new 申请的内存空间要用delete 释放,不要混用。

因为两者实现的机理不同。

2…程序什么时候应该使用线程,什么时候单线程效率高。

1 耗时的操作使用线程,提高应用程序响应

2 并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。

3 多CPU系统中,使用线程提高CPU利用率

4 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 其他情况都使用单线程。

3.类相关的题目
为什么要进行封装?
什么是多态,多态是怎么实现的?多态的应用场景?
虚函数表是属于类的还是属于成员的?虚指针呢?
虚函数,纯虚函数?什么时候使用虚函数,什么时候使用纯虚函数?有了虚函数为什么还要用纯虚函数,可以用虚函数替代纯虚函数吗?
类的构造函数可以定义为虚函数吗?析构函数呢?
基类的析构函数为什么通常需要定义为虚函数?如果不定义为虚函数会有什么问题?什么场景下会产生这种问题?
定义拷贝构造函数的时候参数有什么要求?为什么要将参数定义为引用,如果不定义为引用会产生什么问题?
什么是深拷贝?怎么实现深拷贝?
构造函数的成员初始化列表的使用场景?什么时候必须使用初始化列表?

4.说一说C与C++的内存分配方式?

1从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,如全局变量,static变量。

2在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

3从堆上分配(动态内存分配)程序在运行的时候用malloc或new申请任意多少的内存,程序员负责在何时用free或delete释放内存。动态内存的生存期自己决定,使用非常灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值