cocos2d-x面试题总结
Cocos2d-x游戏开发面试题总结
C++部分:
1.c与c++有什么不用之处?
C和c++最主要的区别在于它们解决问题的思想方法不一样,c解决问题的方法,主要是通过一个过程,对输入进行运算处理得到输出,而对于c++,解决问题的思想主要是构造一个对象模型,让这个模型能够契合与之对应的问题域.这样就可以通过获取对象的状态信息得到输出.总的来说就是c++在c的基础上拓展了面向对象的内容,如类/虚函数/继承/模板等等.
2.c++有什么特点?
A.c++是c语言的超集。它即保持了c语言的简洁、高效、和接近汇编语言等特点,又克服了c语言的缺点,其编译系统能检查更多的语法错误,因此c++比c语言更安全。
B.c++保持了与c语言的兼容。绝大多数c语言程序可以不经修改直接再c++环境中运行,用c语言编写的众多库函数可以用于c++程序中。
C.支持面向对象程序设计的特征。C++即支持面向对象的程序设计,又支持面向对象的程序设计
D.c++程序在可重用性、可扩展性、可维护性和可靠性等方面都较c语言得到了提高,使其更适合开发大中型的系统软件和应用程序。
E.c++设计成静态类型、和c同样高效且可移植的多用途程序设计语言。
F.c++设计成尽可能与c兼容,藉此提供一个从c到c++的平滑过渡。
3.你怎么理解c++的函数模板?
所谓函数模板,实际上就是建立一个通用的函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用的函数就称为模板函数,凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需再模板中定义一次即可,在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。
4.你如何理解c++的指针?
本质上讲指针也是一种变量,普通的变量包含的是实际的数据,而指针变量包含的是内存中的一块地址,这块地址指向某个变量或者函数,指针就是地址,指针就是一个指示器,它告诉程序在内存的那一块区域可以找到数据。
指针的内容主要包括4部分:指针的类型、指针指向的类型、指针的值、指针本身所占有的内存区,例如:Int* p;p就表示一个指针,指针的类型是int*,指针指向的类型是int,指针的值是指指针所指向的内存区域的地址,就是指针本身存储的数值。指针本身所占有的内存区是指针本身占内存的大小,在32位的平台里,指针本身占据了4个字节的长度。
5.在什么情况下会用得到指针?
A.当你需要获取地址时,必须使用指针。
B.当在传递参数时,多数要使用指针
C.使用new关键字创建的内存必须使用一个指针指向操作
D.在使用链表时,需要使用指针。
6.使用指针有什么好处?
A.指针可以申请不连续的数据存储空间,而数组是连续的,如果数组空间没有全部占用,就会造成浪费,但是指针就不会这样,因为它是用多少就申请多少。
B.使用指针还可以创建数据结构,如链表、二叉树,来进行一些快速查找、快速删除的操作。
7.什么是面向对象?
对同类的事物抽象出相同的部分,形成类。类中的大多数数据只能用本类的方法进行处理,类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。
8.引用和指针的区别?
A.指针是一个变量,只不过这个变量存储的是一个地址,指向内存中的一个存储单元;而引用跟原来的变量实质上是一个东西,只不过是原变量的一个别名而已,
B.可以有const指针,但是没有const引用。
C.指针可以有多级,但是引用智能有一级。
D.指针的值可以为空,但是引用的值不能为空,并且引用在定义的时候必须初始化。
E.指针的值在进行了初始化后还可以改变,使其指向其他的存储单元,而引用在初始化后就不会改变了。
F.声明一个引用,不是新定义一个变量,他只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储空间,系统也不给引用分配存储单元。所以,当sizeof(引用)的时候,实际上求得是所指向的变量的大小,而sizeof(指针)的时候,求的则是指针本身的大小。
G.指针和引用的自增(++)运算意义不一样
Cocos2d-x部分:
- 内存管理采用什么机制?
- Cocos2d-x怎么实现跨平台?
- Cocos2d-x3.0版本有什么特性?
- 把之前版本中使用的很多OC模式改为了c++模式。
- 去掉所有CC前缀,因为已经有了cocos2d这个命名空间了。另外不再使用匈牙利命名法
- 增加了模板容器cocos2d::vector<>和cocos2d::map<>。其实就是把标准库中的容器再封装了一下。另外还废弃了CCObject对象。Cocos2d-x也不再使用这个基类对象
- 使用命令行的方式创建新的工程,并且这个工具是跨平台的。也就是说,可以再不同的平台下使用相同的命令行方式来创建工程。
- 不再使用SpriteBatchNode来提高渲染效率了。Sprite能自动处理批量渲染工作。
- 原来的三种lable现在3合1了,直接用Label就行,新的Label支持描边。阴影、荧光等特效。
- 移除了一些与平台相关性的代码,所以更易于维护和扩展
- Node的变形直接采用了4*4的矩阵而不是以前的2*3的矩阵。因此可以设计2.5D的游戏。
- 一体化的事件分发器:可以处理所有事件:比如:用户事件。Touch事件。键盘事件、加速器事件等,旧的事件分配器被废弃。
10. 添加了一些新的UI空间。如:bullet、layout、pageView、ScrollView、Silder。
11. 虽然3.0有很多新的接口。但老的接口任可以使用。只是会注明已废弃。
12. Release和autorelease有什么区别?
13. C++新特性: