本文源自于个人github仓库:https://github.com/forthespada/InterviewGuide
github仓库内有PDF版本下载方式,欢迎各位star、fork~
立志收录计算机校招、社招面试最全面试八股文,无内鬼来点八股文~

161、成员初始化列表会在什么时候用到?它的调用过程是什么?

1) 当初始化一个引用成员变量时;

2) 初始化一个const成员变量时;

3) 当调用一个基类的构造函数,而构造函数拥有一组参数时;

4) 当调用一个成员类的构造函数,而他拥有一组参数;

5) 编译器会一一操作初始化列表,以适当顺序在构造函数之内安插初始化操作,并且在任何显示用户代码前。list中的项目顺序是由类中的成员声明顺序决定的,不是初始化列表中的排列顺序决定的。

162、构造函数的执行顺序是什么?

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

2) 对象的vptr被初始化;

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

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

163、一个类中的全部构造函数的扩展过程是什么?

1) 记录在成员初始化列表中的数据成员初始化操作会被放在构造函数的函数体内,并与成员的声明顺序为顺序;

2) 如果一个成员并没有出现在成员初始化列表中,但它有一个默认构造函数,那么默认构造函数必须被调用;

3) 如果class有虚表,那么它必须被设定初值;

4) 所有上一层的基类构造函数必须被调用;

5) 所有虚基类的构造函数必须被调用。

164、哪些函数不能是虚函数?把你知道的都说一说

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

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

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

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

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

165、说一说strcpy、sprintf与memcpy这三个函数的不同之处

1) 操作对象不同

① strcpy的两个操作对象均为字符串

② sprintf的操作源对象可以是多种数据类型,目的操作对象是字符串

③ memcpy的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。

2) 执行效率不同

memcpy最高,strcpy次之,spri