C++ 常见面试题精选

C++ 常见面试题精选

1.定义和声明的区别?

声明可以出现多次,定义有且只能出现一次。

定义:为新的实体变量分配地址和存储空间,只能在一个地方声明。
声明:不分配地址,告诉编译器变量的名称和类型,使用extern修饰,可以声明多次。

2.sizeof和strlen的区别?

sizeof是操作符,参数可以是数据类型,也可以是变量,在编译时就计算出来了,计算数据类型占用内存大小。
strlen是库函数,参数只能是字符串,运行时才能算出来,字符串实际长度。

3.C 语言的关键字 static 和 C++ 的关键字 static 有什么区别?

C语言中static用来修饰局部静态变量和外部静态变量,函数。
C++中除上述功能外,还能用来定义类的成员变量和函数,即静态成员变量和静态成员函数。

4.面对对象的三大特征?

封装:将数据和操作数据的方法实现封装隐藏,对外使用提供公共接口去调用对象。
继承:子类继承父类的属性和方法,使得子类对象拥有父类的属性和方法,子类可以创建新的属性和方法。
多态:同一个方法用于不同的对象调用产生不同的行为。

5.C++如何实现多态?

函数重载,函数模板,虚函数
函数重载:在同一作用域内,可以声明几个功能类似的同名函数,但是其中参数的类型,个数,顺序,返回值不同。
virtual关键字修饰基类的成员函数,派生类重写此函数。虚函数的实现原理,当类初始化后,存在一个指针,指向一张表,表中存的时候虚函数的地址。子类继承了父类,重写了父类的虚函数后,表中的地址会替换成子类的重写后函数的地址,即虚表指针指向子类的虚表。

6.指针和引用的区别?

引用是一个变量的别名,不需要内存空间。指针初始化必须分配空间。引用不能被改变,指针可以改变多次。引用不能为空,指针可以为空。引用后不需要解引用,指针需要释放内存空间。

7.const关键字?

const用来定义一个只读的变量或者对象。在一定程度上可以提高程序的安全性和可靠性。

8.c++中四种智能指针

unique_ptr,拥有对对象的独有权,两个指针不能指向同一个对象,该对象被销毁时,会在其析构函数中删除关联的原始指针。
shared_ptr,使用引用计数实现对同一块内存的多个引用。在最后一个引用被释放时,指向的内存才释放

9.STL中各个容器的介绍

vector:动态数组,在内存中拥有一串连续的地址空间,在中间插入和删除元素效率低,时间复杂度为o(n)
list:双向链表,内存空间可以是不连续的,通过指针来进行数据访问,在任何地方插入删除效率高。

10.析构函数为什么要设为虚函数?

无法释放子类对象,导致内存泄露。

11.指针常量和常量指针的区别?

指针常量,指针存储的值只能在定义的时候初始化,其他地方不可以改变,强调指针的不可变性。
常量指针,指针指向一个可读对象,不可以通过常量指针来改变,强调所指对象的不可以变性。

12.红黑树的特性

每个节点都是红色或者黑色
跟节点是黑色
每个叶子结点是黑色
如果一个叶子结点是红色,那么他的儿子均是黑色

13.C 语言和 C++ 中 molloc /free和 new /delete的区别?

共同点是:
都是从堆上申请空间,并且需要用户手动释放。

不同的地方是:

  1. malloc和free是函数,new和delete是操作符。
  2. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值