游戏开发面试答案篇(一)-- C++篇​

游戏开发程序岗面试题答案版C++篇,后续继续更新游戏逻辑篇、unity篇、图形学篇,并整理成文档,可在公号【游戏君五尘】获取 

原文链接

游戏开发面试答案篇(一)-- C++篇​

目录

一、基础语法

二、面向对象

三、内存

四、STL

五、C++11新特征

一、基础语法

1、C 和 C++的区别

i. C++是面向对象的的编程语言,C是面向过程的编程语言

ii. C++中的内存分配运算符是new/delete而C 中是malloc和free

iii. C++中有函数重载而C 中没有

iv. C++中新增了引用的概念而C 中只有值和指针

2、struct 和 class的区别

i. struct 一般用于描述一个数据结构集合而class是对一个对象数据的封装

ii. class 默认访问修饰符是私有的而struct 是公有的

iii. 在继承方面 class默认是私有继承而struct 默认是公有继承

3、define宏定义 和 const 的区别

i. 首先 宏定义是在编译的预处理阶段起作用而const是在编译、运行时起作用

ii. 其次 宏定义它只做替换,并不会进行检查,很容易报错而const有数据类型,编译器会对它进行类型检查

iii. 最后 宏定义的数据没有分配内存,只是插入替换

而const定义的变量只是值不能变,但是会分配内存

4、define宏定义 和 line内联函数的区别

i. 首先 宏定义在预处理阶段起作用,只做简单的字符串替换,它没有返回值而 内联函数在编译阶段起作用,有返回值

ii. 然后 内联函数在编译时直接将函数代码嵌入到目标代码中,省去了函数调用的开销,从而提高性能,并且可以重载

iii. 最后 编译器会对内联函数进行类型检查以及语法判断

而宏定义不会

5、指针和引用的区别

i. 指针是一个变量,里面存放的是地址而引用是变量的别名,它和原来的变量实际上是同一个东西ii. 指针可以有多级而引用只能有一级

iii. 指针在初始化依然可以改变指向而引用初始化后就不能改变

iv. 对指针取地址,得到的是指针原本的地址

而对引用取地址,得到的是变量的地址

6、数组和指针的区别

i. 首先 数组是存储多个相同数据类型的集合。数组名是首元素的地址而指针是变量,用于存放其它变量在内存中的地址。指针名指向内存的首地址

ii. 其次 数组在内存中是连续存储的,通过数组下标进行访问,数组不是在静态区就是在栈上而指针的存储的存储空间不能确定iii. 最后 用sizeof计算数组,得到的是整个数组的大小

而指针得到的是该指针变量的大小

7、数组指针和指针数组的区别

数组指针:它是指向数组的指针,它的本质是指针,只不过指向数组中的某一个元素指针数组:它是存放指针的数组,其本质是数组,只不过其中存放的元素是指针

数组指针写做 int(*ptr) [4]

指针数组写做 int* ptr[4]

8、深拷贝和浅拷贝的区别

原因:在拷贝构造的过程中,导致两个对象指向同一块内存区域,这样再释放内存的过程中就会导致内存资源重复释放浅拷贝因为浅拷贝只是拷贝了一个指针,并没有新开辟一块内存区域所以就导致了两个对象指向了同一块地址最后会导致内存资源的重复释放深拷贝深拷贝是直接开辟了一个新的空间,新对象指向这个新的空间

这样 即使原对象被析构,也不会影响到新对象

9、移动构造和拷贝构造的区别

i. 首先 在拷贝构造函数中,如果涉及到指针,就需要用到深拷贝而在移动构造函数中,则用的是浅拷贝

ii. 最后 拷贝构造函数的参数是一个左值引用

而移动构造函数的参数是一个右值或将亡值的引用

10、重载,重写,隐藏的区别

i. 首先,只有同一范围定义的同名函数才存在重载关系重载特点是函数名相同,参数类型和数目不同

ii. 然后,重写是指子类覆盖父类中的同名函数,要求子类函数必须是虚函数,且与父类的虚函数有相同的参数类型,参数个数,以及返回值类型

iii. 所以,重写和重载的区别重载是函数之间的关系,重写是子类和父类的关系重载要求参数类型和数目不同,重载要求参数列表和返回值相同iv. 最后隐藏是指,子类中的函数屏蔽了父类中的同名函数。隐藏发生条件如下两者函数参数相同,但父类函数不是虚函数。与重写的区别在于父类是否为虚函数

两者参数不同,不管父类是不是虚函数,都会隐藏

11、指针常量和常量指针的区别

这里以以C++primer为准

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值