《C++程序设计》
习题解答
1
目录
第2部分 习题解答 .................................................................................................................................. 2
第1章 面向对象程序设计概述 ...................................................................................................... 2 第2章 面向过程程序设计 ............................................................................................................ 12 第3章 类和对象 ............................................................................................................................ 18 第4章 继承与派生 ........................................................................................................................ 24 第5章 多态性与虚函数 ................................................................................................................ 33 第6章 友元与静态成员 ................................................................................................................ 37 第7章 运算符重载 ........................................................................................................................ 41 第8章 泛型编程 ............................................................................................................................ 50 第9章 输入/输出 ........................................................................................................................... 55 第10章 异常处理 .......................................................................................................................... 61
I
第2部分 习题解答
第1章 面向对象程序设计概述
一、简答题
简述面向过程程序设计和面向对象程序设计的编程思想,体会面向对象程序设计的优点。 【答案要点】
面向过程程序设计的编程思想:功能分解、逐步求精、模块化、结构化。当要设计一个目标系统时,首先从整体上概括出整个系统需要实现的功能,然后对系统的每项功能进行逐层分解,直到每项子功能都足够简单,不需要再分解为止。具体实现系统时,每项子功能对应一个模块,模块间尽量相对独立,通过模块间的调用关系或全局变量而有机地联系起来。
面向对象程序设计的编程思想:
(1)客观世界中的事物都是对象(object),对象之间存在一定的关系。
(2)用对象的属性(attribute)描述事物的静态特征,用对象的操作(operation)描述事物的行为(动态特征)。
(3)对象的属性和操作结合为一体,形成一个相对独立、不可分的实体。对象对外屏蔽其内部细节,只留下少量接口,以便与外界联系。
(4)通过抽象对对象进行分类,把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是其所属类的一个实例。
(5)复杂的对象可以用简单的对象作为其构成部分。
(6)通过在不同程度上运用抽象的原则,可以得到一般类和特殊类。特殊类继承一般类的属性与操作,从而简化系统的构造过程。
(7)对象之间通过传递消息进行通信,以实现对象之间的动态联系。 (8)通过关联表达类之间的静态关系。
与传统的面向过程程序设计相比,面向对象程序设计的优点如下:
(1)从认识论的角度看,面向对象程序设计改变了软件开发的方式。软件开发人员能够利用人类认识事物所采用的一般思维方式来进行软件开发。
(2)面向对象程序中的数据的安全性高。外界只能通过对象提供的对外接口操作对象中的数据,这可以有效保护数据的安全。
(3)面向对象程序设计有助于软件的维护与复用。某类对象数据结构的改变只会引起该类对象操作代码的改变,只要其对外提供的接口不发生变化,程序的其余部分就不需要做任何改动。面向对象程序设计中类的继承机制有效解决了代码复用的问题。人们可以像使用集成电路(IC)构造计算机硬件那样,比较方便地重用对象类来构造软件系统。 二、编程题
【程序参考代码】
/*学生信息管理系统C语言源代码student.c*/ #include
#define MAXSIZE 100 /*能够处理的学生总人数,可以随意修改*/ typedef struct { /*用于存放生日信息的结构体*/ int year; int month; int day; }Date;
typedef struct Stud{ /*用于存放学生信息的结构体*/ char Num[12]; /*学号为11位*/
char Name[11]; /*姓名,最多5个汉字*/
char Sex[2]; /*性别,男记为m,女记为f */
2
Date Birthday; /*出生日期*/ float English, DataStructure, CPlusPlus; /*三门课成绩*/
float Sum, Average; /*总成绩、平均成绩*/ }Student;
char CurFile[40]; /*存放当前正在操作的磁盘文件的文件名*/ int IsOpen=0; /*当前是否有磁盘文件被打开标志*/ int found=0; /*在查找学生信息时是否找到标志*/
Student stud[MAXSIZE]; /*用于存放读入内存中的所有学生信息的全局数组*/ int Index=0; /*存放实际学生人数的全局变量*/
/*各自定义函数原型声明*/
void Create(); /*新建学生信息文件*/
void Open(); /*打开学生信息文件,并读取学生信息到全局数组stud中*/ void Display(); /*显示学生信息*/ void Search(); /*查询学生信息*/
int SearchNum(char* Num); /*按学号查询学生信息*/ int SearchName(char* Name); /*按姓名查询学生信息*/ void Append(); /*添加学生信息*/ void Modify(); /*修改学生信息*/ void Delete(); /*删除学生信息*/
void Total(); /*统计所有学生某一科目总成绩*/ void Sort(); /*学生信息排序*/ void Backup(); /*备份学生信息*/ void menu() /*系统功能菜单*/ { int choice; /*用于保存用户对功能菜单的选择结果*/ for( ; ; ) { /*显示系统功能菜单*/ printf(\ printf(\学生信息管理系统 *******************\\n\ printf(\ printf(\ 1.新建学生信息文件 *****************\\n\ printf(\ 2.打开学生信息文件 *****************\\n\ printf(\ 3.显示学生信息 *****************\\n\ printf(\ 4.查询学生信息 *****************\\n\ printf(\ 5.添加学生信息 *****************\\n\ printf(\ 6.修改学生信息 *****************\\n\ printf(\ 7.删除学生信息 *****************\\n\ printf(\ 8.统计学生信息 *****************\\n\ printf(\ 9.学生信息排序 *****************\\n\ printf(\ 10.备份学生信息 *****************\\n\ printf(\ 0.退出系统 *****************\\n\ printf(\ printf(\ 请选择要执行的操作(0~8):_\ scanf(\ switch(choice){
case 1: Create(); break; case 2: Open(); break; case 3: Display(); break; case 4: Search(); break; case 5: Append(); break; case 6: Modify(); break; case 7: Delete(); break; case 8: Total(); break; case 9: Sort(); break; case 10: Backup(); break; case 0: return;
第 3 页
《C++面向对象程序设计》习题答案



