C++语言程序设计课后答案(郑莉第4版)

上传人:gbs****77 文档编号:9921814 上传时间:2020-04-09 格式:DOC 页数:138 大小:389.50KB
返回 下载 相关 举报
C++语言程序设计课后答案(郑莉第4版)_第1页
第1页 / 共138页
C++语言程序设计课后答案(郑莉第4版)_第2页
第2页 / 共138页
C++语言程序设计课后答案(郑莉第4版)_第3页
第3页 / 共138页
点击查看更多>>
资源描述
第 一 章 概述 1 1 简述计算机程序设计语言的发展历程 解 迄今为止计算机程序设计语言的发展经历了机器语言 汇编语言 高级语言等阶段 C 语 言是一种面向对象的编程语言 也属于高级语言 1 2 面向对象的编程语言有哪些特点 解 面向对象的编程语言与以往各种编程语言有根本的不同 它设计的出发点就是为了能更直 接的描述客观世界中存在的事物以及它们之间的关系 面向对象的编程语言将客观事物看 作具有属性和行为的对象 通过抽象找出同一类对象的共同属性 静态特征 和行为 动 态特征 形成类 通过类的继承与多态可以很方便地实现代码重用 大大缩短了软件开发 周期 并使得软件风格统一 因此 面向对象的编程语言使程序能够比较直接地反问题域 的本来面目 软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发 C 语言是目前应用最广的面向对象的编程语言 1 3 什么是结构化程序设计方法 这种方法有哪些优点和缺点 解 结构化程序设计的思路是 自顶向下 逐步求精 其程序结构是按功能划分为若干个基本 模块 各模块之间的关系尽可能简单 在功能上相对独立 每一模块内部均是由顺序 选 择和循环三种基本结构组成 其模块化实现的具体方法是使用子程序 结构化程序设计由 于采用了模块分解与功能抽象 自顶向下 分而治之的方法 从而有效地将一个较复杂的 程序系统设计任务分解成许多易于控制和处理的子任务 便于开发和维护 虽然结构化程序设计方法具有很多的优点 但它仍是一种面向过程的程序设计方法 它把 数据和处理数据的过程分离为相互独立的实体 当数据结构改变时 所有相关的处理过程 都要进行相应的修改 每一种相对于老问题的新方法都要带来额外的开销 程序的可重用 性差 由于图形用户界面的应用 程序运行由顺序运行演变为事件驱动 使得软件使用起来越来 越方便 但开发起来却越来越困难 对这种软件的功能很难用过程来描述和实现 使用面 向过程的方法来开发和维护都将非常困难 1 4 什么是对象 什么是面向对象方法 这种方法有哪些特点 解 从一般意义上讲 对象是现实世界中一个实际存在的事物 它可以是有形的 也可以是无 形的 对象是构成世界的一个独立单位 它具有自己的静态特征和动态特征 面向对象方 法中的对象 是系统中用来描述客观事物的一个实体 它是用来构成系统的一个基本单位 由一组属性和一组行为构成 面向对象的方法将数据及对数据的操作方法放在一起 作为一个相互依存 不可分离的整 体 对象 对同类型对象抽象出其共性 形成类 类中的大多数数据 只能用本类的方法 进行处理 类通过一个简单的外部接口 与外界发生关系 对象与对象之间通过消息进行 通讯 这样 程序模块间的关系更为简单 程序模块的独立性 数据的安全性就有了良好 的保障 通过实现继承与多态性 还可以大大提高程序的可重用性 使得软件的开发和维 护都更为方便 面向对象方法所强调的基本原则 就是直接面对客观存在的事物来进行软件开发 将人们 在日常生活中习惯的思维方式和表达方式应用在软件开发中 使软件开发从过分专业化的 方法 规则和技巧中回到客观世界 回到人们通常的思维 1 5 什么叫做封装 解 封装是面向对象方法的一个重要原则 就是把对象的属性和服务结合成一个独立的系统单 位 并尽可能隐蔽对象的内部细节 1 6 面向对象的软件工程包括哪些主要内容 解 面向对象的软件工程是面向对象方法在软件工程领域的全面应用 它包括面向对象的分析 OOA 面向对象的设计 OOD 面向对象的编程 OOP 面向对象的测试 OOT 和 面向对象的软件维护 OOSM 等主要内容 1 7 简述计算机内部的信息可分为几类 解 计算机内部的信息可以分成控制信息和数据信息二大类 控制信息可分为指令和控制字两 类 数据信息可分为数值信息和非数值信息两类 1 8 什么叫二进制 使用二进制有何优点和缺点 解 二进制是基数为 2 每位的权是以 2 为底的幂的进制 遵循逢二进一原则 基本符号为 0 和 1 采用二进制码表示信息 有如下几个优点 1 易于物理实现 2 二进制数运算简单 3 机器可靠性高 4 通用性强 其缺点是它表示数的容量较小 表示同一个数 二进制较其 他进制需要更多的位数 1 9 请将以下十进制数值转换为二进制和十六进制补码 1 2 2 9 3 93 4 32 5 65535 6 1 解 1 2 10 10 2 2 16 2 9 10 1001 2 9 16 3 93 10 1011101 2 5D 16 4 32 10 11100000 2 E0 16 5 65535 10 11111111 11111111 2 FFFF 16 6 1 10 11111111 11111111 2 FFFF 16 1 10 请将以下数值转换为十进制 1 1010 2 2 10001111 2 3 01011111 11000011 2 4 7F 16 5 2D3E 16 6 F10E 16 解 1 1010 2 10 10 2 10001111 2 143 10 3 01011111 11000011 2 24515 10 4 7F 16 127 10 5 2D3E 16 11582 10 6 F10E 16 61710 10 1 11 简要比较原码 反码 补码等几种编码方法 解 原码 将符号位数字化为 0 或 1 数的绝对值与符号一起编码 即所谓 符号 绝对值 表示 的编码 正数的反码和补码与原码表示相同 负数的反码与原码有如下关系 符号位相同 仍用 1 表示 其余各位取反 0 变 1 1 变 0 补码由该数反码的最末位加 1 求得 第 二 章 C 简单程序设计 2 1 C 语言有那些主要特点和优点 解 C 语言的主要特点表现在两个方面 一是全面兼容 C 二是支持面向对象的方法 C 是 一个更好的 C 它保持了 C 的简洁 高效 接近汇编语言 具有良好的可读性和可移植性 等特点 对 C 的类型系统进行了改革和扩充 因此 C 比 C 更安全 C 的编译系统能检查 出更多的类型错误 C 语言最重要的特点是支持面向对象 2 2 下列标识符哪些是合法的 Program page lock test2 3in1 mail A B C D 解 Program lock test2 A B C D 是合法的标识符 其它的不是 2 3 例 2 1 中每条语句的作用是什么 include void main void cout Hello n cout Welcome to c n 解 include 指示编译器将文件 iostream h 中的代码 嵌入到该程序中该指令所在的地方 void main 主函数名 void 表示函数没有返回值 函数体标志 cout Hello n 输出字符串 Hello 到标准输出设备 显示器 上 cout Welcome to c n 输出字符串 Welcome to c 在屏幕输出如下 Hello Welcome to c 2 4 使用关键字 const 而不是 define 语句的好处有哪些 解 const 定义的常量是有类型的 所以在使用它们时编译器可以查错 而且 这些变量在调试 时仍然是可见的 2 5 请写出 C 语句声明一个常量 PI 值为 3 1416 再声明一个浮点型变量 a 把 PI 的值 赋给 a 解 const float PI 3 1416 float a PI 2 6 在下面的枚举类型中 Blue 的值是多少 enum COLOR WHITE BLACK 100 RED BLUE GREEN 300 解 Blue 102 2 7 注释有什么作用 C 中有哪几种注释的方法 他们之间有什么区别 解 注释在程序中的作用是对程序进行注解和说明 以便于阅读 编译系统在对源程序进行编 译时不理会注释部分 因此注释对于程序的功能实现不起任何作用 而且由于编译时忽略 注释部分 所以注释内容不会增加最终产生的可执行程序的大小 适当地使用注释 能够 提高程序的可读性 在 C 中 有两种给出注释的方法 一种是延用 C 语言方法 使用 和 括起注释文字 另一种方法是使用 从 开始 直到它所在行的行尾 所有字 符都被作为注释处理 2 8 什么叫做表达式 x 5 7 是一个表达式吗 它的值是多少 解 任何一个用于计算值的公式都可称为表达式 x 5 7 是一个表达式 它的值为 12 2 9 下列表达式的值是多少 1 201 4 2 201 4 3 201 4 0 解 1 50 2 1 3 50 25 2 10 执行完下列语句后 a b c 三个变量的值为多少 a 30 b a c a 解 a 32 b 30 c 32 2 11 在一个 for 循环中 可以初始化多个变量吗 如何实现 解 在 for 循环设置条件的第一个 前 用 分隔不同的赋值表达式 例如 for x 0 y 10 x 100 x y 2 12 执行完下列语句后 n 的值为多少 int n for n 0 n 100 n 解 n 的值为 100 2 13 写一条 for 语句 计数条件为 n 从 100 到 200 步长为 2 然后用 while 和 do while 语句完成同样的循环 解 for 循环 for int n 100 n 200 n 2 while 循环 int x 100 while n 200 n 2 do while 循环 int n 100 do n 2 while n y x y else y x y x y x 2 17 修改下面这个程序中的错误 改正后它的运行结果是什么 include void main int i int j i 10 给 i 赋值 j 20 给 j 赋值 cout i j i j 输出结果 return 0 解 改正 include int main int i int j i 10 给 i 赋值 j 20 给 j 赋值 cout i j i j 输出结果 return 0 程序运行输出 i j 30 2 18 编写一个程序 运行时提示输入一个数字 再把这个数字显示出来 解 源程序 include int main int i cout i cout 您输入一个数字是 i endl return 0 程序运行输出 请输入一个数字 5 您输入一个数字是 5 2 19 C 有哪几种数据类型 简述其值域 编程显示你使用的计算机中的各种数据类型的 字节数 解 源程序 include int main cout The size of an int is t t sizeof int bytes n cout The size of a short int is t sizeof short bytes n cout The size of a long int is t sizeof long bytes n cout The size of a char is t t sizeof char bytes n cout The size of a float is t t sizeof float bytes n cout The size of a double is t sizeof double bytes n return 0 程序运行输出 The size of an int is 4 bytes The size of a short int is 2 bytes The size of a long int is 4 bytes The size of a char is 1 bytes The size of a float is 4 bytes The size of a double is 8 bytes 2 20 打印 ASCII 码为 32 127 的字符 解 include int main for int i 32 i 128 i cout char i return 0 程序运行输出 G 0123456789 ABCDEFGHIJKLMNOP QRSTUVWXYZ abcdefghijklmnopqrstuvwxyz s 2 21 运行下面的程序 观察其输出 与你的设想是否相同 include int main unsigned int x unsigned int y 100 unsigned int z 50 x y z cout Difference is x x z y cout nNow difference is x endl return 0 解 程序运行输出 Difference is 50 Now difference is 4294967246 注意 第二行的输出并非 50 注意 x y z 的数据类型 2 22 运行下面的程序 观察其输出 体会 i 与 i 的差别 include int main int myAge 39 initialize two integers int yourAge 39 cout I am myAge years old n cout You are yourAge years old n myAge postfix increment yourAge prefix increment cout One year passes n cout I am myAge years old n cout You are yourAge years old n cout Another year passes n cout I am myAge years old n cout You are yourAge years old n cout Let s print it again n cout I am myAge years old n cout You are yourAge years old n return 0 解 程序运行输出 I am 39 years old You are 39 years old One year passes I am 40 years old You are 40 years old Another year passes I am 40 years old You are 41 years old Let s print it again I am 41 years old You are 41 years old 2 23 什么叫常量 什么叫变量 解 所谓常量是指在程序运行的整个过程中其值始终不可改变的量 除了用文字表示常量外 也可以为常量命名 这就是符号常量 在程序的执行过程中其值可以变化的量称为变量 变量是需要用名字来标识的 2 24 变量有哪几种存储类型 解 变量有以下几种存储类型 auto 存储类型 采用堆栈方式分配内存空间 属于一时性存储 其存储空间可以被若干变 量多次覆盖使用 register 存储类型 存放在通用寄存器中 extern 存储类型 在所有函数和程序段中都可引用 static 存储类型 在内存中是以固定地址存放的 在整个程序运行期间都有效 2 25 写出下列表达式的值 1 2 3 while 1 cout flag if toupper flag Y cout 现在正在下雨 break if toupper flag N cout 现在没有下雨 break 程序运行输出 现在正在下雨吗 Yes or No x 现在正在下雨吗 Yes or No l 现在正在下雨吗 Yes or No q 现在正在下雨吗 Yes or No n 现在没有下雨 或 现在正在下雨吗 Yes or No y 现在正在下雨 2 29 编写一个完整的程序 运行时向用户提问 你考试考了多少分 0 100 接收输 入后判断其等级 显示出来 规则如下 解 include void main int i score cout score if score 100 score 0 cout 分数值必须在 0 到 100 之间 else i score 10 switch i case 10 case 9 cout 你的成绩为优 break case 8 cout 你的成绩为良 break case 7 case 6 cout 你的成绩为中 break default cout 你的成绩为差 程序运行输出 你考试考了多少分 0 100 85 你的成绩为良 2 30 1 实现一个简单的菜单程序 运行时显示 Menu A dd D elete S ort Q uit Select one 提示用户输入 A 表示增加 D 表示删除 S 表示排序 Q 表示退出 输入为 A D S 时分别提示 数据已经增加 删除 排序 输入为 Q 时程序结束 要求使用 if else 语句进行判断 用 break continue 控制程序流程 解 include include void main char choice c while 1 cout c choice toupper c if choice A cout 数据已经增加 endl continue else if choice D cout 数据已经删除 endl continue else if choice S cout 数据已经排序 endl continue else if choice Q break 程序运行输出 Menu A dd D elete S ort Q uit Select one a 数据已经增加 Menu A dd D elete S ort Q uit Select one d 数据已经删除 Menu A dd D elete S ort Q uit Select one s 数据已经排序 Menu A dd D elete S ort Q uit Select one q 2 实现一个简单的菜单程序 运行时显示 Menu A dd D elete S ort Q uit Select one 提示用户输入 A 表示增加 D 表示删除 S 表示排序 Q 表示退出 输入为 A D S 时分 别提示 数据已经增加 删除 排序 输入为 Q 时程序结束 要求使用 Switch 语句 解 源程序 include include void main char choice while 1 cout choice switch toupper choice case A cout 数据已经增加 endl break case D cout 数据已经删除 endl break case S cout 数据已经排序 endl break case Q exit 0 break default 程序运行输出 Menu A dd D elete S ort Q uit Select one a 数据已经增加 Menu A dd D elete S ort Q uit Select one d 数据已经删除 Menu A dd D elete S ort Q uit Select one s 数据已经排序 Menu A dd D elete S ort Q uit Select one q 2 31 用穷举法找出 1 100 间的质数 显示出来 分别使用 while do while for 循环语句 实现 解 源程序 使用 while 循环语句 include include void main int i j k flag i 2 while i 100 flag 1 k sqrt i j 2 while j k if i j 0 flag 0 break j if flag cout i 是质数 endl i 使用 do while 循环语句 include include void main int i j k flag i 2 do flag 1 k sqrt i j 2 do if i j 0 flag 0 break j while j k if flag cout i 是质数 endl i while i 100 使用 for 循环语句 include include void main int i j k flag for i 2 i 100 i flag 1 k sqrt i for j 2 j k j if i j 0 flag 0 break if flag cout i 是质数 endl 程序运行输出 2 是质数 3 是质数 5 是质数 7 是质数 11 是质数 13 是质数 17 是质数 19 是质数 23 是质数 29 是质数 31 是质数 37 是质数 41 是质数 43 是质数 47 是质数 53 是质数 59 是质数 61 是质数 67 是质数 71 是质数 73 是质数 79 是质数 83 是质数 89 是质数 97 是质数 2 32 比较 Break 语句与 Continue 语句的不同用法 解 Break 使程序从循环体和 switch 语句内跳出 继续执行逻辑上的下一条语句 不能用在别 处 continue 语句结束本次循环 接着开始判断决定是否继续执行下一次循环 2 33 定义一个表示时间的结构体 可以精确表示年 月 日 小时 分 秒 提示用户输 入年 月 日 小时 分 秒的值 然后完整地显示出来 解 源程序见 实验指导 部分实验二 2 34 在程序中定义一个整型变量 赋以 1 100 的值 要求用户猜这个数 比较两个数的大 小 把结果提示给用户 直到猜对为止 分别使用 while do while 语句实现循环 解 使用 while 语句 include void main int n 18 int m 0 while m n cout m if n m cout 你猜的值太小了 endl else if n m cout 你猜的值太大了 endl else cout 你猜对了 endl 使用 do while 语句 include void main int n 18 int m 0 do cout m if n m cout 你猜的值太小了 endl else if n m cout 你猜的值太大了 endl else cout 你猜对了 endl while n m 程序运行输出 请猜这个数的值为多少 0 100 50 你猜的值太大了 请猜这个数的值为多少 0 100 25 你猜的值太大了 请猜这个数的值为多少 0 100 10 你猜的值太小了 请猜这个数的值为多少 0 100 15 你猜的值太小了 请猜这个数的值为多少 0 100 18 你猜对了 2 35 定义枚举类型 weekday 包括 Sunday 到 Saturday 七个元素在程序中定义 weekday 类 型的变量 对其赋值 定义整型变量 看看能否对其赋 weekday 类型的值 解 include enum weekday Sunday Monday Tuesday Wednesday Thursday Friday Saturday void main int i weekday d Thursday cout d d endl i d cout i i endl d weekday 6 cout d d endl d weekday 4 cout d d endl 程序运行输出 d 4 i 4 d 6 d 4 第三章 函数 3 1 C 中的函数是什么 什么叫主调函数 什么叫被调函数 二者之间有什么关系 如何 调用一个函数 解 一个较为复杂的系统往往需要划分为若干子系统 高级语言中的子程序就是用来实现这种 模块划分的 C 和 C 语言中的子程序就体现为函数 调用其它函数的函数被称为主调函 数 被其它函数调用的函数称为被调函数 一个函数很可能既调用别的函数又被另外的函 数调用 这样它可能在某一个调用与被调用关系中充当主调函数 而在另一个调用与被调 用关系中充当被调函数 调用函数之前先要声明函数原型 按如下形式声明 类型标识符 被调函数名 含类型说明的形参表 声明了函数原型之后 便可以按如下形式调用子函数 函数名 实参列表 3 2 观察下面程序的运行输出 与你设想的有何不同 仔细体会引用的用法 源程序 include int main int intOne int intOne 5 cout intOne t t intOne endl cout rSomeRef t rSomeRef endl int intTwo 8 rSomeRef intTwo not what you think cout nintOne t t intOne endl cout intTwo t t intTwo endl cout rSomeRef t rSomeRef endl return 0 程序运行输出 intOne 5 rSomeRef 5 intOne 8 intTwo 8 rSomeRef 8 3 3 比较值调用和引用调用的相同点与不同点 解 值调用是指当发生函数调用时 给形参分配内存空间 并用实参来初始化形参 直接将实 参的值传递给形参 这一过程是参数值的单向传递过程 一旦形参获得了值便与实参脱离 关系 此后无论形参发生了怎样的改变 都不会影响到实参 引用调用将引用作为形参 在执行主调函数中的调用语句时 系统自动用实参来初始化形 参 这样形参就成为实参的一个别名 对形参的任何操作也就直接作用于实参 3 4 什么叫内联函数 它有哪些特点 解 定义时使用关键字 inline 的函数叫做内联函数 编译器在编译时在调用处用函数体进行替换 节省了参数传递 控制转移等开销 内联函数体内不能有循环语句和 switch 语句 内联函数的定义必须出现在内联函数第一次被调用之前 对内联函数不能进行异常接口声明 3 5 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗 解 不必一致 所有的参数是根据位置和类型而不是名字来区分的 3 6 重载函数时通过什么来区分 解 重载的函数的函数名是相同的 但它们的参数的个数和数据类型不同 编译器根据实参和 形参的类型及个数的最佳匹配 自动确定调用哪一个函数 3 7 编写函数 参数为两个 unsigned short int 型数 返回值为第一个参数除以第二个参数 的结果 数据类型为 short int 如果第二个参数为 0 则返回值为 1 在主程序中实现输入 输出 解 源程序 include short int Divider unsigned short int a unsigned short int b if b 0 return 1 else return a b typedef unsigned short int USHORT typedef unsigned long int ULONG int main USHORT one two short int answer cout one cout two answer Divider one two if answer 1 cout Answer answer else cout Error can t divide by zero return 0 程序运行输出 Enter two numbers Number one 8 Number two 2 Answer 4 3 8 编写函数把华氏温度转换为摄氏温度 公式为 C F 32 5 9 在主程序中提示用户 输入一个华氏温度 转化后输出相应的摄氏温度 解 源程序见 实验指导 部分实验三 3 9 编写函数判断一个数是否是质数 在主程序中实现输入 输出 解 include include int prime int i 判一个数是否是质数的函数 void main int i cout i if prime i cout i 是质数 endl else cout i 不是质数 endl int prime int i int j k flag flag 1 k sqrt i for j 2 j k j if i j 0 flag 0 break if flag return 1 else return 0 程序运行输出 请输入一个整数 1151 1151 是质数 3 10 编写函数求两个整数的最大公约数和最小公倍数 解 源程序 include include int fn1 int i int j 求最大公约数的函数 void main int i j x y cout i cout j x fn1 i j y i j x cout i 和 j 的最大公约数是 x endl cout i 和 j 的最小公倍数是 y endl int fn1 int i int j int temp if i j temp i i j j i while j 0 temp i j i j j temp return i 程序运行输出 请输入一个正整数 120 请输入另一个正整数 72 120 和 72 的最大公约数是 24 120 和 72 的最小公倍数是 360 3 11 什么叫作嵌套调用 什么叫作递归调用 解 函数允许嵌套调用 如果函数 1 调用了函数 2 函数 2 再调用函数 3 便形成了函数的嵌套 调用 函数可以直接或间接地调用自身 称为递归调用 3 12 在主程序中提示输入整数 n 编写函数用递归的方法求 1 2 n 的值 解 include include int fn1 int i void main int i cout i cout 从 1 累加到 i 的和为 fn1 i endl int fn1 int i if i 1 return 1 else return i fn1 i 1 程序运行输出 请输入一个正整数 100 从 1 累加到 100 的和为 5050 3 13 编写递归函数 GetPower int x int y 计算 x 的 y 次幂 在主程序中实现输入输出 解 源程序 include long GetPower int x int y int main int number power long answer cout number cout power answer GetPower number power cout number to the power th power is answer 2 fib 1 fib 2 1 观察递归调用的过程 解 源程序见 实验指导 部分实验三 3 15 用递归的方法编写函数求 n 阶勒让德多项式的值 在主程序中实现输入 输出 解 include float p int n int x void main int n x cout n cout x cout n n endl cout x x endl cout P n x p n x endl float p int n int x if n 0 return 1 else if n 1 return x else return 2 n 1 x p n 1 x n 1 p n 2 x n 程序运行输出 请输入正整数 n 1 请输入正整数 x 2 n 1 x 2 P1 2 2 请输入正整数 n 3 请输入正整数 x 4 n 3 x 4 P3 4 154 3 16 使用模板函数实现 Swap x y 函数功能为交换 x y 的值 解 源程序 include template void swap T z x x y y z void main int j 1 k 2 double v 3 0 w 4 0 cout j j k k endl cout v v w w endl swap j k int swap v w double cout After swap endl cout j j k k endl cout v v w w endl 程序运行输出 j 1 k 2 v 3 14 w 4 35 After swap j 2 k 1 v 4 35 w 3 14 第 四 章 类 4 1 解释 public 和 private 的作用 公有类型成员与私有类型成员有些什么区别 解 公有类型成员用 public 关键字声明 公有类型定义了类的外部接口 私有类型的成员用 private 关键字声明 只允许本类的函数成员来访问 而类外部的任何访问都是非法的 这 样 私有的成员就整个隐蔽在类中 在类的外部根本就无法看到 实现了访问权限的有效 控制 4 2 protected 关键字有何作用 解 protected 用来声明保护类型的成员 保护类型的性质和私有类型的性质相似 其差别在于 继承和派生时派生类的成员函数可以访问基类的保护成员 4 3 构造函数和析构函数有什么作用 解 构造函数的作用就是在对象被创建时利用特定的值构造对象 将对象初始化为一个特定的 状态 使此对象具有区别于彼对象的特征 完成的就是是一个从一般到具体的过程 构造 函数在对象创建的时候由系统自动调用 析构函数与构造函数的作用几乎正好相反 它是用来完成对象被删除前的一些清理工作 也就是专门作扫尾工作的 一般情况下 析构函数是在对象的生存期即将结束的时刻由系 统自动调用的 它的调用完成之后 对象也就消失了 相应的内存空间也被释放 4 4 数据成员可以为公有的吗 成员函数可以为私有的吗 解 可以 二者都是合法的 数据成员和成员函数都可以为公有或私有的 但数据成员最好定 义为私有的 4 5 已知 class A 中有数据成员 int a 如果定义了 A 的两个对象 A1 A2 它们各自的数据 成员 a 的值可以不同吗 解 可以 类的每一个对象都有自己的数据成员 4 6 什么叫做拷贝构造函数 拷贝构造函数何时被调用 解 拷贝构造函数是一种特殊的构造函数 具有一般构造函数的所有特性 其形参是本类的对 象的引用 其作用是使用一个已经存在的对象 去初始化一个新的同类的对象 在以下三 种情况下会被调用 在当用类的一个对象去初始化该类的另一个对象时 如果函数的形参 是类对象 调用函数进行形参和实参结合时 如果函数的返回值是类对象 函数调用完成 返回时 4 7 拷贝构造函数与赋值运算符 有何不同 解 赋值运算符 作用于一个已存在的对象 而拷贝构造函数会创建一个新的对象 4 8 定义一个 Dog 类 包含的 age weight 等属性 以及对这些属性操作的方法 实现并 测试这个类 解 源程序 include class Dog public Dog int initialAge 0 int initialWeight 5 Dog int GetAge return itsAge inline void SetAge int age itsAge age inline int GetWeight return itsWeight inline void SetWeight int weight itsAge weight inline private int itsAge itsWeight Dog Dog int initialAge int initialWeight itsAge initialAge itsWeight initialWeight Dog Dog destructor takes no action int main Dog Jack 2 10 cout Jack is a Dog who is cout Jack GetAge years old and cout Jack GetWeight pounds weight n Jack SetAge 7 Jack SetWeight 20 cout Now Jack is cout Jack GetAge years old and cout Jack GetWeight pounds weight return 0 程序运行输出 Jack is a Dog who is 2 years old and 10 pounds weight Now Jack is 7 years old 20 pounds weight 4 9 设计并测试一个名为 Rectangle 的矩形类 其属性为矩形的左下角与右上角两个点的坐 标 能计算矩形的面积 解 源程序 include class Rectangle public Rectangle int top int left int bottom int right Rectangle int GetTop const return itsTop int GetLeft const return itsLeft int GetBottom const return itsBottom int GetRight const return itsRight void SetTop int top itsTop top void SetLeft int left itsLeft left void SetBottom int bottom itsBottom bottom void SetRight int right itsRight right int GetArea const private int itsTop int itsLeft int itsBottom int itsRight Rectangle Rectangle int top int left int bottom int right itsTop top itsLeft left itsBottom bottom itsRight right int Rectangle GetArea const int Width itsRight itsLeft int Height itsTop itsBottom return Width Height int main Rectangle MyRectangle 100 20 50 80 int Area MyRectangle GetArea cout Area Area n return 0 程序运行输出 Area 3000 Upper Left X Coordinate 20 4 10 设计一个用于人事管理的 People 人员 类 考虑到通用性 这里只抽象出所有类型 人员都具有的属性 number 编号 sex 性别 birthday 出生日期 id 身份证号 等等 其中 出生日期 定义为一个 日期 类内嵌子对象 用成员函数实现对人员信息的录 入和显示 要求包括 构造函数和析构函数 拷贝构造函数 内联成员函数 带缺省形参 值的成员函数 聚集 解 本题用作实验四的选做题 因此不给出答案 4 11 定义一个矩形类 有长 宽两个属性 有成员函数计算矩形的面积 解 include class Rectangle public Rectangle float len float width Length len Width width Rectangle float GetArea return Length Width float GetLength return Length float GetWidth return Width private float Length float Width void main float length width cout length cout width Rectangle r length width cout 长为 length 宽为 width 的矩形的面积为 r GetArea endl 程序运行输出 请输入矩形的长度 5 请输入矩形的宽度 4 长为 5 宽为 4 的矩形的面积为 20 4 12 定义一个 数据类型 datatype 类 能处理包含字符型 整型 浮点型三种类型的数据 给出其构造函数 解 include class datatype enum character integer floating point vartype union char c int i float f public datatype char ch vartype character c ch datatype int ii vartype integer i ii datatype float ff vartype floating point f ff void print void datatype print switch vartype case character cout 字符型 c endl break case integer cout 整型 i endl break case floating point cout 浮点型 f endl break void main datatype A c B 12 C 1 44F A print B print C print 程序运行输出 字符型 c 整型 12 浮点型 1 44 4 13 定义一个 Circle 类 有数据成员半径 Radius 成员函数 GetArea 计算圆的面积 构 造一个 Circle 的对象进行测试 解 include class Circle public Circle float radius Radius radius Circle float GetArea return 3 14 Radius Radius private float Radius void main float radius cout radius Circle p radius cout 半径为 radius 的圆的面积为 p GetArea endl 程序运行输出 请输入圆的半径 5 半径为 5 的圆的面积为 78 5 4 14 定义一个 tree 类 有成员 ages 成员函数 grow int years 对 ages 加上 years age 显示 tree 对象的 ages 的值 解 include class Tree int ages public Tree int n 0 Tree void grow int years void age Tree Tree int n ages n Tree Tree age void Tree grow int years ages years void Tree age cout 这棵树的年龄为 ages endl void main Tree t 12 t age t grow 4 程序运行输出 这棵树的年龄为 12 这棵树的年龄为 16 第 五 章 C 程序的基本结构 5 1 什么叫做作用域 有哪几种类型的作用域 解 作用域讨论的是标识符的有效范围 作用域是一个标识符在程序正文中有效的区域 C 的 作用域分为函数原形作用域 块作用域 局部作用域 类作用域和文件作用域 5 2 什么叫做可见性 可见性的一般规则是什么 解 可见性是标识符是否可以引用的问题 可见性的一般规则是 标识符要声明在前 引用在后 在同一作用域中 不能声明同名的 标识符 对于在不同的作用域声明的标识符 遵循的原则是 若有两个或多个具有包含关 系的作用域 外层声明的标识符如果在内层没有声明同名标识符时仍可见 如果内层声明 了同名标识符则外层标识符不可见 5 3 下面的程序的运行结果是什么 实际运行一下 看看与你的设想有何不同 include void myFunction int x 5 y 7 int main cout x from main x n cout y from main y n n myFunction cout Back from myFunction n n cout x from main x n cout y from main y n return 0 void myFunction int y 10 cout x from myFunction x n cout y from myFunction y n n 解 程序运行输出 x from main 5 y from main 7 x from myFunction 5 y from myFunction 10 Back from myFunction x from main 5 y from main 7 5 4 假设有两个无关系的类 Engine 和 Fuel 使用时 怎样允许 Fuel 成员访问 Engine 中的私 有和保护的成员 解 源程序 class fuel class engine friend class fuel private int powerlevel public engine powerLevel 0 void engine fn fuel class fuel friend class engine private int fuelLevel public fuel fuelLevel 0 void fuel fn engine 5 5 什么叫做静态数据成员 它有何特点 解 类的静态数据成员是类的数据成员的一种特例 采用 static 关键字来声明 对于类的普通 数据成员 每一个类的对象都拥有一个拷贝 就是说每个对象的同名数据成员可以分别存 储不同的数值 这也是保证对象拥有自身区别于其它对象的特征的需要 但是静态数据成 员 每个类只要一个拷贝 由所有该类的对象共同维护和使用 这个共同维护 使用也就 实现了同一类的不同对象之间的数据共享 5 6 什么叫做静态函数成员 它有何特点 解 使用 static 关键字声明的函数成员是静态的 静态函数成员属于整个类 同一个类的所有 对象共同维护 为这些对象所共享 静态函数成员具有以下两个方面的好处 一是由于静 态成员函数只能直接访问同一个类的静态数据成员 可以保证不会对该类的其余数据成员 造成负面影响 二是同一个类只维护一个静态函数成员的拷贝 节约了系统的开销 提高 程序的运行效率 5 7 定义一个 Cat 类 拥有静态数据成员 HowManyCats 记录 Cat 的个体数目 静态成员 函数 GetHowMany 存取 HowManyCats 设计程序测试这个类 体会静态数据成员和 静态成员函数的用法 解 源程序 include class Cat public Cat int age itsAge age HowManyCats virtual Cat HowManyCats virtual int GetAge return itsAge virtual void SetAge int age itsAge age static int GetHowMany return HowManyCats private int itsAge static int HowManyCats int Cat HowManyCats 0 void TelepathicFunction int main const int MaxCats 5 Cat CatHouse MaxCats int i for i 0 i MaxCats i CatHouse i new Cat i TelepathicFunction for i 0 i MaxCats i delete CatHouse i TelepathicFunction return 0 void TelepathicFunction cout There are Cat GetHowMany cats alive n 程序运行输出 There are 1 cats alive There are 2 cats alive There are 3 cats alive There are 4 cats alive There are 5 cats
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!