参考书目:《C++程序设计(第3版)》谭浩强 编著
第1章——C++的初步认识
1. 请根据你的了解,叙述C++的特点。C++对C有哪些发展?
- C++主要有三个特点,即封装性、继承性和多态性。
- 封装性:对于"计算机"这个类,我们将"计算机"的属性(如:颜色、重量、体积、样式等)和行为(启动、关机、散热等)全部打包封装在计算机类中,这样一方面使我们可以容易地看出这些属性和行为的"主人"是什么,进一步方便使用;另一方面也使这些属性和行为不会被错误地访问(例如,汽车也有启动这一行为,这就与计算机的启动行为重复,那么到底访问的是哪一个呢?)。这体现了面向对象编程的封装性。
- 继承性:在设计了计算机类之后,我们又想设计一个笔记本计算机类,按照一般的思路应该再重新设计一个类。此时发现笔记本计算机类和计算机类很相似。与计算机类相比,笔记本计算机类只不过在属性上多了一个"电池",在方法上多了"打开盖子"和"安装电池",而且在逻辑上讲,它们是"同属"的关系,即笔记本计算机是计算机的一种。在这种关系下,可以在它们之间建立派生关系,让笔记本计算机类从计算机类中扩展出来,这相当于在计算机类原有的属性和方法的基础上扩展一些新的属性和方法,这样就产生了笔记本计算机类。
- 多态性:但是,上面的设计也有一些问题,因为笔记本计算机与计算机之间的某些方法在具体实现上有细微的差别,如散热,通常台式机由于体积大,散热性能较好,而笔记本计算机体积小,散热性能较差,因此可能需要在外部增设一些散热设备。这就需要在笔记本计算机类中对"散热"方法再次定义,而在计算机类中只是模糊地提一下散热的概念,这体现的是面向对象程序设计的多态性。
- C语言具有很强的数据处理能力,不仅仅是在软件开发上,在各类科研中都会用到它。但是随着软件规模和复杂度的增加,C语言渐渐有些不合时宜了,这主要体现在数据的封装上,这一点使C语言在数据的安全性上有很大的缺陷。另外,C语言属于面向过程的编程语言,这在企业级的大型程序中无法更好地实现分工。为了应对上述困难,C++语言应运而生,信息屏蔽是C++的一大特点。C++语言几乎继承了C语言的所有优点,但与C语言最大的区别在于"类(class)“的出现,类的出现使抽象程度更高的面向对象编程与泛型编程成为可能。另外,和C语言相比,C++语言引入了更多的特性,包括陈述性声明、类似函数的强制转换、new/delete操作符、布尔类型、参考类型、默认函数、函数重载、命名空间、类(包括所有和类相关的特性,如继承、成员函数、虚函数、抽象类等)、操作符重载、模板、”::"操作符、异常处理和运行时期识别等。
2. 一个C++程序是由哪几部分构成的?其中的每一部分分别起到什么作用?
- 预处理指令——如#include预处理指令符,它负责告诉编译器,在程序编译之前将尖括号内的文件原地展开,这类文件一般称为头文件。它包含了程序运行的许多函数的声明以及类的接口,为程序的编译提供支持
- 全局声明部分——包括对用户自己定义的数据类型的声明和程序中所用到的变量的定义。
- 函数——实现操作的部分
但是并不要求每一程序文件都必须全部具有以上3个部分,可以缺少某些部分(包括函数)。也就是说,有的程序文件可以不包括函数,而只包括预处理命令和(或)声明部分。
3. 从接受一个任务到获得最终结果,一般要经过几个步骤?
- 经过5个步骤:①用C++语言编写程序 ②对源程序进行编译 ③将目标文件连接 ④运行程序 ⑤分析运行结果
4. 请说明编辑、编译、连接的作用。在编译后得到的目标文件为什么不能直接运行?
- 编译是将高级语言写的指令通过编译系统转化为机器能够识别和执行的,由0和1组成的二进制指令,通过编译会将源文件转换为目标文件。目标文件中虽然包含了机器语言代码,但并不是一个完整的程序,由于缺少启动代码与库代码所以暂时不能运行。此时需要将目标文件和系统的库文件以及系统提供的其他信息进行连接,最终生成可直接运行的二进制文件.exe。
第2章 数据的存储、表示形式和基本运算
1. C++为什么要规定对所有用到的变量要"先定义,后使用"。这样做有什么好处?
- 凡先被事先定义的,不作为变量名,这样就能保证程序中变量名使用得正确。如在声明部分写了
int student; ,而在执行语句中错写成statent,在编译时检查出statent未经定义,作为错误处理。 - 每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。如指定a和b为int型,一般的编译系统对其分配4个字节,并按整数方式存储数据。
- 指定每一变量属于一个特定的类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。如整形变量a和b,可以进行求余运算。如果将a和b指定为实型变量,则不允许进行"求余"运算,在编译时会给出有关"出错信息"。
2. 字符常量与字符串常量有什么区别?
- 用单撇号括起来的一个字符就是字符常量,在内存中占一个字节。字符常量只包括一个字符,如’AB’是不合法的,撇号是界定符,而不属于字符常量的一部分。
- 用双撇号括起来的字符就是字符串常量,编译系统会在字符串最后自动加一个’\0’作为字符串结束标志。但’\0’并不是字符串的一部分,它只作为字符串的结束标志。
- 如"a"和’a’代表不同的含义,前者是字符串常量,占两个字节,后者是字符常量,占一个字节。
3. 区别用#define指令定义的符号常量和用const定义的常变量
- 符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储单元。
- 常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以用sizeof运算符测出其长度。与一般变量唯一不同的是指定变量的值不能改变。
|