嵌入式八股 - C++ 二
博主是26届校招生,接受过京东、阿里、字节、科大讯飞、海康威视、正浩创新、奥比中光、商汤科技、中国航信、汇川技术、CVTE、美的、格力、亿道、康冠科技、9号公司、猿辅导、中科曙光、中航光电、郑煤机、国家能源等公司的面试。获得过郑煤机、亿道、格力、CVTE、阿里、科大讯飞以及一些国企的offer。现在把所有面试遇到问题进行汇总,希望能够帮到大家!
主要是高频面试汇总!
11、什么是内联函数?
内联函数需要inline关键字进行修饰,其和普通函数没什么大区别,其就是把经常调用的功能封装成了一个函数。在后续调用时,可以直接将函数体插入调用的地方,而避免函数调用的开销。
注意:内联函数适用于频繁调用但函数体很小的情况
12、什么是友元函数?
友元的目的就是让一个函数或者类访问另一个类中私有成员,友元的关键字为 friend。
分类:
- 友元函数(友元全局函数)
- 友元类
- 友元成员(友元成员函数)
13、介绍下虚函数?
虚函数是C++中实现多态的重要方式(通过virtual 修饰),其允许在派生类中重写基类的函数,并确保当通过基类指针或引用调用该函数时,程序能根据对象的实际类型来执行相应的函数。
虚函数使用的核心目的是通过基类访问派生类定义的函数。
虚函数实现多态的三个必要条件:
- 继承关系:必须存在派生类和基类。
- 虚函数声明:基类中的函数必须用
virtual关键字声明。 - 基类指针/引用调用:必须通过基类的指针或引用来调用该虚函数。
虚函数的实现有两个比较重要的知识:虚函数表与虚表指针
- 虚函数表:每个包含虚函数的类都会有一张虚函数表,其内存储着类所有虚函数的地址。如果派生类重写了某个虚函数,表中对应的条目就会被替换为派生类的函数地址。
- 虚表指针 :每个包含虚函数的类的对象都会有虚表指针,其指向所属类的虚函数表。
14、什么是纯虚函数,与虚函数区别?
纯虚函数是一种特殊的虚函数,其在基类中只有声明而没有具体的实现。
包含纯虚函数的类是抽象类,其只能作为基类被继承,而不能实例化对象。其形式如下:
virtual void func() = 0;
两者区别:
- 实现方式:虚函数需要在函数前面加上virtual,而纯虚函数还需要在后面加上= 0
- 有无实现:虚函数可以有默认实现,而纯虚函数只能声明没有默认实现
- 是否重写:虚函数在派生类中可重写也可不重写,而纯虚函数在派生类中必须重写,否则也是个抽象类
- 是否可实例化:只包含虚函数的类能实例化对象,而纯虚函数的类不能实例化对象。
15、函数重载是什么?
函数重载是指在同一个作用域内定义多个同名函数,只要它们的参数列表不同即可。
参数列表不同情况:
- 参数类型不同
- 参数个数不同
- 参数类型顺序不同
注意:返回值类型不同不能作为重载标准!
16、C++实现多态的方式?
- 静态多态:函数重载、函数模板
- 动态多态:虚函数
17、重载、覆盖、隐藏区别?
- 函数重载是指在同一个作用域内定义多个同名函数,只是其参数列表不同。
- 覆盖(重写)则是指在继承时,在派生类中重新定义基类的虚函数。(不同作用域下)
- 隐藏指在继承中,派生类定义了与基类同名的函数,不管参数是否相同,只要不构成重写,基类的同名函数就会被隐藏。(不同作用域下)
18、哪些函数不能是虚函数?
- 构造函数。虚函数的调用依赖于对象内部的虚表指针,而 虚表指针是在构造函数执行期间才被初始化
- 静态成员函数。虚函数是基于对象的,它通过
this指针来访问对象的虚表指针。而静态成员函数是属于类本身的,不属于任何特定对象,因此它没有this指针。 - 全局函数。本身就不是类成员,不支持多态。
- 友元函数。本身不支持继承。
注意:内联函数可做也可不做虚函数,建议不做。
19、哪些函数可以是虚函数?
- 普通成员函数。最常用的,使用
virtual声明即可。 - 析构函数。
20、为什么析构函数往往是虚函数?
当通过基类指针删除一个派生类对象时,如果基类析构函数不是虚函数,则只会调用基类的析构函数,导致派生类部分的资源无法被正确释放,从而引发内存泄漏。声明为虚函数后,程序会在运行时正确地先调用派生类的析构函数,再调用基类的析构函数。
#嵌入式笔面经分享##嵌入式八股##嵌入式面试##嵌入式##我的求职进度条#涉及嵌入式全方面知识。根据个人学习以及面试所得,并且加上自己见解、理解记忆方法。 大致内容:C、C++、ARM、QT、Linux驱动、FreeRTOS、Linux应用编程、数据结构、操作系统、计算机网络、算法以及其他嵌入式相关内容。