附录J 复习题答案
本章概述
本附录提供各章复习题的参考答案,帮助读者检验对知识点的掌握程度。
第2章 复习题答案
C++的main()函数有哪两种标准格式?
cppint main() { /* ... */ } int main(int argc, char* argv[]) { /* ... */ }cout和cin分别用于什么?
cout用于标准输出(输出到屏幕)cin用于标准输入(从键盘读取)
C++程序的源代码扩展名通常是什么?
.cpp、.cxx、.cc、.C
using namespace std;的作用是什么?
- 将整个
std名称空间引入当前作用域,可以不使用std::前缀
- 将整个
第3章 复习题答案
为什么C++有多种整型和浮点类型?
- 为了提供不同大小和精度的数据类型,满足不同需求
char类型和整型有什么关系?
char本质上是一个小整数,通常占1字节,可以存储ASCII码值
什么是类型转换?有哪几种方式?
- 类型转换是将一种数据类型转换为另一种
- 方式:隐式转换、
static_cast、dynamic_cast、const_cast、reinterpret_cast
const和#define定义常量有什么区别?
const有类型检查,#define只是文本替换const遵循作用域规则,#define是全局的
第4章 复习题答案
数组和vector有什么区别?
- 数组大小固定,
vector可以动态调整 vector的at()方法提供边界检查
- 数组大小固定,
如何使用new创建动态数组?
cppint* arr = new int[10]; // 创建 delete[] arr; // 释放指针和数组有什么关系?
- 数组名是指向第一个元素的指针
- 数组作为参数传递时退化为指针
结构和共用体有什么区别?
- 结构所有成员共享内存(相加)
- 共用体所有成员共享同一内存(取最大)
第5章 复习题答案
for循环的三个表达式分别是什么作用?
- 初始化:设置循环变量初始值
- 条件:判断是否继续循环
- 表达式:修改循环变量
前缀和后缀递增运算符有什么区别?
- 前缀
++i:先递增,后使用 - 后缀
i++:先使用,后递增
- 前缀
while和do while有什么区别?
while先判断条件,可能一次也不执行do while先执行循环体,至少执行一次
如何使用cin读取包括空格的输入?
- 使用
getline(cin, str)读取整行
- 使用
第6章 复习题答案
&&和||的短路求值是什么?
&&:第一个操作数为假时,不再计算第二个||:第一个操作数为真时,不再计算第二个
switch语句中为什么需要break?
- 不使用break会发生"贯穿"(fallthrough)
如何检查文件是否成功打开?
- 使用
is_open()方法或bool转换
- 使用
cctype库提供了哪些字符函数?
isalpha()、isdigit()、isalnum()、isspace()等
第7章 复习题答案
按值传递和按引用传递有什么区别?
- 按值传递:函数接收参数副本,不影响原变量
- 按引用传递:函数接收参数引用,可以修改原变量
数组作为参数时为什么需要额外传递大小?
- 数组作为参数退化为指针,丢失大小信息
递归函数的基准情况是什么?
- 基准情况是递归结束的条件,不再进行递归调用
函数指针有什么用途?
- 回调函数、函数数组、策略模式、动态分发
第8章 复习题答案
内联函数和普通函数有什么区别?
- 内联函数在调用点展开,消除函数调用开销
引用和指针有什么区别?
- 引用是别名,必须初始化,不能重新绑定
- 指针是地址,可以不初始化,可以改变指向
函数重载的规则是什么?
- 函数名相同,参数列表不同
函数模板如何工作?
- 编译器根据调用自动生成具体类型的函数
第9-18章复习题答案要点
详细答案请参考各章节内容。主要要点:
- 第9章:存储方案、名称空间、单独编译
- 第10章:类、构造函数、析构函数、this指针
- 第11章:运算符重载、友元、类型转换
- 第12章:动态内存、拷贝控制、静态成员
- 第13章:继承、多态、虚函数、抽象基类
- 第14章:包含、私有继承、多重继承、类模板
- 第15章:友元类、嵌套类、异常、RTTI
- 第16章:string、智能指针、STL容器/迭代器/算法
- 第17章:流、格式化、文件I/O、随机存取
- 第18章:移动语义、Lambda、可变参数模板、并行编程