referencehere
2007年摩托罗拉笔试题
1. 介绍一下STL,详细说明STL如何实现vector。
STL (标准模版库,Standard Template Library.它由容器算法迭代器组成。 vector实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。 |
2. 如果用VC开发程序,常见这么几个错误,C2001,c2005,c2011,这些错误的原因是什么。
参考msdn: 编译器错误 C2001 错误消息 常数中有换行符 字符串常数不能继续到第二行,除非进行下列操作: · 用反斜杠结束第一行。 · 用一个双引号结束第一行上的字符串,并在下一行用另一个双引号开始该字符串。 用 \n 结束第一行是不够的。 编译器错误 C2005 错误消息#line 应跟一个行号,却找到“token” #line 指令后面必须跟行号。 编译器错误 C2011 错误消息“identifier”:“type”类型重定义 该标识符已定义为 type 类型。如果多次将某个类型库导入同一个文件,也可能生成 C2011。 |
3. 继承和委派有什么分别,在决定使用继承或者委派的时候需要考虑什么。
在OOD,OOP中,组合优于继承. 当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类。 |
4. 指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?
(1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初 不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,显得很安全。 总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性. |
5. 参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么?
传值,传指针或者引用 |
6. 结合一个项目说明你怎样应用设计模式的理念。
设计模式更多考虑是扩展和重用,而这两方面很多情况下,往往会被忽略。 |
7. 介绍一下你对设计模式的理解。(这个过程中有很多很细节的问题随机问的)
设计模式概念是由建筑设计师Christopher Alexander提出:"每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复劳动."上述定义是对设计模式的广义定义.将其应用到面向对象软件的领域内,就形成了对设计模式的狭义定义. |
8. 框架与设计模式的区别:
1) 设计模式和框架针对的问题域不同.设计模式针对面向对象的问题域;框架针对特定业务的问题域; 2) 设计模式比框架更为抽象.设计模式在碰到具体问题后,才能产生代码;框架已经可以用代码表示; 3) 设计模式是比框架更小的体系结构元素.框架中可以包括多个设计模式。 设计模式就像武术中基本的招式.将这些招式合理地纵组合起来,就形成套路(框架),框架是一种半成品。 |
9. C++和C定义结构的分别是什么。
C language 的结构仅仅是数据的结合 |
10. 构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的呢?
构造函数不能为虚函数,要构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。 |
11. 拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。
深拷贝意味着拷贝了资源和指针,而浅拷贝只是拷贝了指针,没有拷贝资源 临时对象的开销比局部对象小些。 |
12. 结合1个你认为比较能体现OOP思想的项目,用UML来描述。(最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间的一半,并且会问很多问题,一不小心可能会被问住)。
13. 基类的有1个虚函数,子类还需要申明为virtual吗?为什么。
可以不申明 |
14. C也可以通过精心封装某些函数功能实现重用,那C++的类有什么优点吗,难道仅仅是为实现重用。
并不仅仅是这样的。 |
15. C++特点是什么,如何实现多态?画出基类和子类在内存中的相互关系。
多态的基础是继承,需要虚函数的支持,简单的多态是很简单的。 子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数, |
16. 为什么要引入抽象基类和纯虚函数?
主要目的是为了实现一种接口的效果。 |
17. 介绍一下模板和容器。如何实现?(也许会让你当场举例实现)
模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程。 STL有7种主要容器:vector,list,deque,map,multimap,set,multiset. |
18. 你如何理解MVC。简单举例来说明其应用。
MVC模式是observer 模式的一个特例,典型的有MFC里面的文档视图架构。 |
19. 多重继承如何消除向上继承的二义性。
使用虚拟继承即可. |
2015-1-6