本书汇总国内外众多著名IT企业近几年的C++面试笔试真题并予以解析,按知识点类型对常见的C++语言难点和疑点进行了系统归纳和透彻剖析,并提供了一定数量的自测题以便于读者自我检验。
全书逻辑清晰,通俗易懂,适合参加IT企业校园招聘和笔试面试环节的同学复习,也适合C++语言编程爱好者和在校学生阅读与提高。
300多道面试真题,本书汇总国内外众多著名IT企业近几年的C 面试笔试真题并予以解析,按知识点类型对常见的C 语言难点和疑点进行了系统归纳和透彻剖析,并提供了一定数量的自测题便于自我检验。
李春葆:武汉大学教授,主要研究方向为数据挖掘和算法设计,从事近30年计算机C/C 语言、数据结构和算法设计等课程的第一线本科教学工作,具备丰富的教学经验,曾参于深圳名企的笔试和面试题库建设。出版多本C/C 语言、数据结构、算法设计与分析及数据库开发方面的精品教材和教学辅导书。
李筱驰:美国俄亥俄州立大学计算机科学专业硕士毕业,曾参加谷歌等名企面试,具备比较丰富的企业笔试和面试经验。目前在西雅图亚马逊总部工作。
目 录
第1章 C 中的C.. 1
常见考点.. 1
1.1 类型系统和类型安全.. 1
1.1.1 要点归纳.. 1
1.1.2 面试真题解析.. 3
1.2 const和volatile. 4
1.2.1 要点归纳.. 4
1.2.2 面试真题解析.. 6
1.3 C 的显式类型转换.. 7
1.3.1 要点归纳.. 7
1.3.2 面试真题解析.. 9
1.4 内存管理.. 10
1.4.1 要点归纳.. 10
1.4.2 面试真题解析.. 13
1.5 C 函数设计.. 15
1.5.1 要点归纳.. 15
1.5.2 面试真题解析.. 22
1.6 断言.. 27
1.6.1 要点归纳.. 27
1.6.2 面试真题解析.. 27
1.7 自测题和参考答案.. 28
1.7.1 自测题.. 28
1.7.2 参考答案.. 31
第2章 类和对象Ⅰ 33
常见考点.. 33
2.1 类.. 33
2.1.1 要点归纳.. 33
2.1.2 面试真题解析.. 48
2.2 静态成员和静态对象.. 57
2.2.1 要点归纳.. 57
2.2.2 面试真题解析.. 60
2.3 对象指针.. 62
2.3.1 要点归纳.. 62
2.3.2 面试真题解析.. 64
2.4 对象数组.. 66
2.4.1 要点归纳.. 66
2.4.2 面试真题解析.. 69
2.5 this指针.. 70
2.5.1 要点归纳.. 70
2.5.2 面试真题解析.. 76
2.6 对象之间的复制.. 78
2.6.1 要点归纳.. 78
2.6.2 面试真题解析.. 82
2.7 自测题和参考答案.. 85
2.7.1 自测题.. 85
2.7.2 参考答案.. 91
第3章 类和对象Ⅱ. 94
常见考点.. 94
3.1 常对象和常对象成员.. 94
3.1.1 要点归纳.. 94
3.1.2 面试真题解析.. 98
3.2 C 中的explicit 101
3.2.1 要点归纳.. 101
3.2.2 面试真题解析.. 102
3.3 子对象.. 103
3.3.1 要点归纳.. 103
3.3.2 面试真题解析.. 108
3.4 嵌套类和局部类.. 109
3.4.1 要点归纳.. 109
3.4.2 面试真题解析.. 111
3.5 自测题和参考答案.. 114
3.5.1 自测题.. 114
3.5.2 参考答案.. 117
第4章 友元和运算符重载... 119
常见考点.. 119
4.1 友元函数.. 119
4.1.1 要点归纳.. 119
4.1.2 面试真题解析.. 124
4.2 友元类.. 126
4.2.1 要点归纳.. 126
4.2.2 面试真题解析.. 127
4.3 运算符重载概述.. 128
4.3.1 要点归纳.. 128
4.3.2 面试真题解析.. 130
4.4 运算符重载设计.. 132
4.4.1 要点归纳.. 132
4.4.2 面试真题解析.. 146
4.5 两个类对象之间的转换.. 154
4.5.1 要点归纳.. 154
4.5.2 面试真题解析.. 156
4.6 自测题和参考答案.. 157
4.6.1 自测题.. 157
4.6.2 参考答案.. 162
第5章 模板和异常处理... 166
常见考点.. 166
5.1 函数模板.. 166
5.1.1 要点归纳.. 166
5.1.2 面试真题解析.. 172
5.2 类模板.. 175
5.2.1 要点归纳.. 175
5.2.2 面试真题解析.. 182
5.3 异常处理.. 183
5.3.1 要点归纳.. 183
5.3.2 面试真题解析.. 188
5.4 自测题和参考答案.. 190
5.4.1 自测题.. 190
5.4.2 参考答案.. 192
第6章 继承和派生... 193
常见考点.. 193
6.1 继承和派生基础.. 193
6.1.1 要点归纳.. 193
6.1.2 面试真题解析.. 204
6.2 基类对象和派生类对象的使用关系.. 217
6.2.1 要点归纳.. 217
6.2.2 面试真题解析.. 220
6.3 虚继承.. 227
6.3.1 要点归纳.. 227
6.3.2 面试真题解析.. 238
6.4 自测题和参考答案.. 242
6.4.1 自测题.. 242
6.4.2 参考答案.. 248
第7章 虚函数和多态性... 251
常见考点.. 251
7.1 虚函数.. 251
7.1.1 要点归纳.. 251
7.1.2 面试真题解析.. 266
7.2 纯虚函数和抽象类.. 289
7.2.1 要点归纳.. 289
7.2.2 面试真题解析.. 291
7.3 自测题和参考答案.. 294
7.3.1 自测题.. 294
7.3.2 参考答案.. 300
第5章·模板和异常处理
* 函数模板的设计方法。* 函数模板的实例化过程。* 类模板的设计方法。* 类模板的实例化过程。* 异常处理语句try…catch的执行过程。* 异常处理中对象的构造与析构过程。5.1 函 数 模 板5.1.1 要点归纳 1.定义函数模板 值(value)和类型(type)是数据的两个主要特征,在模板中数据的值和类型都被参数化了。C 提供了两种模板机制,即函数模板和类模板。模板中的类型参数也称为类属参数。模板的声明或定义只能在全局或类范围内进行,不能在局部范围(如函数)内进行。使用模板的目的就是为了能够让程序员编写与类型无关的代码。 在定义了一个函数模板后,当编译系统发现有一个对应的函数调用时将根据实参中的类型来确认是否匹配函数模板中对应的类型形参,然后生成一个重载函数。该重载函数的定义体与函数模板的函数定义体相同,它称为模板函数(template function)。 模板、模板类、对象和模板函数之间的关系如图5.1所示。 函数模板与模板函数的区别是函数模板是一个模板,其中用到通用类型参数,不能直接执行;模板函数是一个具体的函数,它由编译系统在遇到具体函数调用时生成,具有程序代码,可以执行。
图5.1 模板、模板类、对象和模板函数之间的关系 定义函数模板的一般格式如下: template <类型形参表> //类型参数声明 返回类型 函数名(形参表) //函数模板 { 函数体; } 例如,以下代码定义了一个绝对值的函数模板: template //注意末尾不要加分号 T abs(T x) { if(x<0) return -x; return x; } ? 有关定义函数模板的说明如下: ? “类型形参表”可以包含基本数据类型,也可以包含类类型。类型形参需要加前缀class或typename表示“跟随类型形参”。如果类型形参多于一个,则每个类型形参都要使用class或typename。这里class和typename关键字没有任何区别,C 早期对模板的支持并不严谨,没有引入新的关键字,后来又引入了新关键字typename,专门用来定义类型 参数。 ? “类型形参表”中的参数必须是唯一的,而且应该在函数体中至少出现一次。例如template是错误的,其中类型参数名称重复。 ? 在template语句与函数模板声明之间不允许有其他语句。例如下面的定义是错 误的: template int i; //错误 T min(T x,T y) { ? 函数体;