十八万字吐血整理的C/C++、嵌入式常见面试题!!!!

欢迎订阅,希望能点个赞!!!!

正在持续更新!!!!!欢迎探讨!!!

完整专栏地址:https://blog.nowcoder.net/zhuanlan/gmPWX0


相关知识点都能零星在网上找到,这个文章系列将目前遇到的所有常见面试问题进行一个汇总。

文中很多资料避免不了从网上或是其他复习资料里收集整理,十分感谢前辈的辛勤付出,如果存在侵权请一定联系我进行删除

也有相当一部分是本人在经历提前批以及秋招的过程中遇到和验证过的。


系列文章PDF下载地址:《最全C_C++及嵌入式软开面试题宝典.pdf》



46、程序员定义的析构函数被扩展的过程?

1.析构函数函数体被执行;

2.如果class拥有成员类对象,而后者拥有析构函数,那么它们会以其声明顺序的相反顺序被调用;

3.如果对象有一个vptr,现在被重新定义

4.如果有任何直接的上一层非虚基类拥有析构函数,则它们会以声明顺序被调用;

5.如果任何虚基类拥有析构函数

47、构造函数的执行算法?

1.在派生类构造函数中,所有的虚基类及上一层基类的构造函数调用;

2.对象的vptr被初始化;

3.如果有成员初始化列表,将在构造函数体内扩展开来,这必须在vptr被设定之后才做;

4.执行程序员所提供的代码;

48、哪些函数不能是虚函数

1.构造函数,构造函数初始化对象,派生类必须知道基类函数干了什么,才能进行构造;当有虚函数时,每一个类有一个虚表,每一个对象有一个虚表指针,虚表指针在构造函数中初始化;

2.内联函数,内联函数表示在编译阶段进行函数体的替换操作,而虚函数意味着在运行期间进行类型确定,所以内联函数不能是虚函数;

3.静态函数,静态函数不属于对象属于类,静态成员函数没有this指针,因此静态函数设置为虚函数没有任何意义。

4.友元函数,友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。

5.普通函数,普通函数不属于类的成员函数,不具有继承特性,因此普通函数没有虚函数。

49、虚函数的调用机制

1.分为静态绑定(编译时绑定),动态绑定(运行时绑定);

当某个虚函数通过指针或是引用调用时就会发生动态绑定,具体调用的函数与对象的动态类型相匹配,当一个基类指针指向派生类时,调用的函数是派生类的函数。

2.由于继承导致对象的指针和引用有两种不同的状态,一个是静态类型,一个是动态类型。

静态类型:指针和引用声明时的类型

动态类型:指针和引用实际指向的类型。

50、什么是类的继承?

1.类与类之间的关系

has-A包含关系,即成员对象。用以描述一个类由多个部件类构成,实现has-A关系用类的成员属性表示,即一个类的成员属性是另一个已经定义好的类;

use-A,一个类使用另一个类,通过类之间的成员函数相互联系,定义友元或者通过传递参数的方式来实现;

is-A,继承关系,关系具有传递性;

2.继承的相关概念

所谓的继承就是一个类继承了另一个类的属性和方法,这个新的类包含了上一个类的属性和方法,被称为子类或者派生类,被继承的类称为父类或者基类;

3.继承的特点

子类拥有父类的所有属性和方法,子类可以拥有父类没有的属性和方法,子类对象可以当做父类对象使用;

4.继承中的访问控制

publicprotectedprivate

5.继承中的构造和析构函数

继承中的构造:

1)子类对象在创建之时会首先调用父类的构造函数

2)先执行父类的构造函数再执行子类的构造函数

3)父类的构造函数可以被隐式调用或者显式调用

继承中的析构:

1)执行自身的析构函数

2)执行成员变量的析构函数

3)执行父类的析构函数

6.继承中的兼容性原则

凡是基类能解决的问题,公有派生类都可以解决:

1)子类对象可以当作父类对象使用

2)子类对象可以直接赋值给父类对象

3)子类对象可以直接初始化父类对象

4)父类指针可以直接指向子类对象

5)父类引用可以直接引用子类对象

在替代之后,派生类对象就可以作为基类的对象使用,但是只能使用从基类继承的成员。