C++面试常见问答题看这三篇文章就够了(中)


  按键伤人      106   
  2021-01-13      C++      

目录


前言

《C++面试常见问答题看这三篇文章就够了(上)》
《C++面试常见问答题看这三篇文章就够了(中)》

正文

1. 构造函数为什么不能声明为虚函数?

1)构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功。编译器无法知道对象的实际类型,是该类本身,还是该类的一个派生类,或是更深层次的派生类,无法确定。
2)虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初始化,将无法进行。析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。

2. 析构函数为什么声明为虚函数?

如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。

3. C++中,能作为函数重载判断依据的是?

const、参数个数、参数顺序。

4. 浅复制和深复制的区别

1)浅层复制,只复制指向对象的指针,而不复制引用对象本身。
2)深层复制,复制引用对象本身。
3)如果是浅复制,修改一个对象可能会影响另外一个对象。
4)如果是深拷贝,修改一个对象不会影响到另外一个对象。

5. 使用select函数检查读超时的用法

if (select(sockfd + 1,&fs,NULL,NULL,&timeout) == 0)

6. 外部变量定义在所有函数之外,它的作用域?

其定义位置开始到整个文件结束。

7. 模板的使用是为了什么?

提高代码的可重用性。

8. 不能被重载的运算符

1、. (成员访问运算符) 2、.* (成员指针访问运算符) 3、:: (域运算符) 4、sizeof(长度运算符) 5、?: (条件运算符)

9. 采用函数重载的目的是什么?

使用方便,提高可靠性。

10. const和#define定义常量的区别

1)define宏是在预处理阶段展开,const常量是编译运行阶段使用。
2)宏没有类型,不做任何类型检查,仅仅是展开。const常量有具体的类型,在编译阶段会执行类型检查。
3)define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。const常量会在内存中分配(可以是堆中也可以是栈中)。

11. 调用一成员函数时, 使用动态联编的情况是?

通过指针或引用调用一虚函数。

12. 在结构化的程序设计中,模块划分的原则是?

模块内具有高内聚度,模块间具有低耦合度。

13. 若main()函数带参数 ,参数个数最多是几个?

2个,main(int argc,char* argv[])。

14. char是有符号还是无符号类型?

取决于具体实现。

15. 哪些因素可能会影响到一个类的大小?

成员个数、是否有虚函数、对齐方式。

16. &和&&的区别

1)对于&和&&,当运算符两边的表达式为true时,结果均为true,只要有一边运算结果为false,则结果均为false。
2)如果运算符左边计算结果为false,则&&不会再继续计算右边表达式值。
3)&可以作为位运算符,而&&不能。
作者:Data-Mining

ps:以上是C++面试常见问答题看这三篇文章就够了(中)全部内容,希望文章能够帮你解决C++面试常见问答题看这三篇文章就够了(中)所遇到的游戏开发问题。
本文收录在 游戏编程 🕹️ - 学习C++专题,分享走一走~

 面试   

猜你喜欢 全系列


您可以在登录后,发表评论