2022年完整word版,C++面向对象程序设计教程—-陈维兴,林小茶课后习题答案 .pdf
《2022年完整word版,C++面向对象程序设计教程—-陈维兴,林小茶课后习题答案 .pdf》由会员分享,可在线阅读,更多相关《2022年完整word版,C++面向对象程序设计教程—-陈维兴,林小茶课后习题答案 .pdf(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+面向对象程序设计教程课后题答案1.1 什么是面向对象程序设计 ? 面向对象程序设计是一种新的程序设计范型. 这种范型的主要特征是 : 程序=对象+消息面向对象程序的基本元素是对象。主要结构特点是:第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的。1.2 什么是对象 ?什么是类 ?对象与类之间的关系是什么? 对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。类和对象之间的关系是抽象和具体的关系。类是多个对象进行
2、综合抽象的结果,一个对象是类的一个实例。1.3 现实世界中的对象有哪些特征?请举例说明。现实世界中的对象具有以下特征:1) 每一个对象必须有一个名字以区别于其他对象;2) 用属性来描述对象的某些特征;3) 有一组操作,每组操作决定对象的一种行为;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 46 页4) 对象的行为可以分为两类:一类是作用于自身的行为,另一类是作用于其他对象的行为。例如一个教师是一个对象。每个教师对象有自己的名字来和别的教师区别。教师具有编号,姓名,年龄,职称,专业等属性。教师拥有走路,吃饭,授课等行为操作。走路,吃饭
3、是作用于自身的行为,授课是作用于其他对象的行为。1.4 什么是消息?消息具有什么性质?一个对象向另一个对象发出的请求成为“消息”。消息具有以下 3 个性质:1) 同一个对象可以接收不同形式的多个消息,做出不同的相应;2) 相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;3) 对消息的响应并不是必须的,对象可以响应消息,也可以不响应。1.5 什么是抽象和封装?请举例说明。抽象是将有关事物的共性归纳、集中的过程。例如:把所有具有大学生学籍的人归为一类,成为“大学生”,这就是一个抽象。封装是指把数据和实现操作的代码集中起来放在对象内部,并尽可能隐藏对象的内部细节。例如:每一台洗衣机都有
4、出厂日期、机器编号等属性,也有启动、暂停、选择等操作。人们在使用洗衣机的时候只需要按下对应的按钮,而不用关心具体的内部实现。这就是封装。1.6 什么是继承?请举例说明。继承就是允许派生类使用基类的数据和操作,同时,派生类还可以增加新的操作和数据。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 46 页例如:哺乳动物是一种热血、有毛发、用奶哺育幼崽的动物;狗是有犬牙、食肉、特定的骨骼结构、群居的哺乳动物。狗就继承了哺乳动物。1.7 若类之间具有继承关系,则他们之间具有什么特征?若类之间具有继承关系,则他们之间具有下列几个特征:1) 类间具
5、有共享特征(包括数据和操作代码的共享);2) 类间具有差别或新增部分(包括非共享的数据和操作代码);3) 类具有层次结构。1.8 什么是单继承、多继承?请举例说明。单继承是指每个派生类只直接继承了一个基类的特征。例如狗继承自哺乳动物。多继承是指多个基类派生出一个派生类的继承关系。比如玩具车同时继承自玩具和车。1.9 什么是多态?请举例说明。多态是指不同的对象收到相同的消息时执行不同的操作。例如,有一个窗口类对象,还有一个棋子类对象。当我们发出“移动”消息时,两个对象的行为不同。1.10 面向对象程序设计的主要优点是什么?1. 可提高程序的重用性;2. 可控制程序的复杂性;3. 可改善程序的可维
6、护性;4. 能够更好地支持大型程序设计;5. 增强了计算机处理信息的范围;能够很好地适应新的硬件环境。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 46 页2.1 简述 C+ 的主要特点。1) C+是 C的超集,保持与 C的兼容。2) 保持了 C的简洁、高效和接近汇编语言等特点,并对C的功能作了不少扩充。用C+ 编写的程序比 C更安全,可读性更好,代码结构更为合理。3) 程序质量高。4) 增加了面向对象机制。2.2 #include usingnamespace std; int main() int a, b, d, min; co
7、ut a b; min = a b ? b : a; for (d = 2; d min; d+) if (a % d) = 0) & (b % d ) = 0) break ; if (d = min) cout No common denominators endl; return0; cout The lowest common denominator is d endl; return0; 2.3 有效精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 46 页2.4 没有函数声明;函数定义没有写返回值类型。2.5 (1)等价,函数
8、声明可以省略参数的名字。(2)不等价,第二个的函数定义不能省略参数的名字。2.6-2.10 CDAAB 2.11-2.15 ACBDC 2.16-2.17 DC 2.18 101 2.19 10 10 2.20 10 20 2.21 举例说明可以使用 const 替代#define 以消除#define 的不安全性。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 46 页#include usingnamespace std; int main() int a = 1; #define T1 a+a #define T2 T1-T1 c
9、out T2 is T2 endl; return0; 上面这个程序,初看应该输出 T2 is 0 但是实际上,得出T2 is 2 如果把 #define 换成 const , 则可以输出想要的结果。2.22 用动态分配空间的方法,计算Fibonacci数列的前 20 项,并存储到动态分配的空间中。#include usingnamespace std; int main() int *pi = new int 20; *pi = 1; pi1 = 1; for ( int i = 2; i 20; i+) pii = pii - 2 + pii - 1; return0; 精选学习资料 -
10、- - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 46 页2.23 重载 sroot 函数,输出一个数的二次方根。#include usingnamespace std; double sroot(int num) return ( double )sqrt(double )num); double sroot(long num) return ( double )sqrt(double )num); double sroot (double num) return ( double )sqrt(num); int main() return0; 2.24
11、 解决百钱问题。将一元人民币换成1、2、5 分的硬币,有多少种换法?#include usingnamespace std; int main() int num = 0; / 总共换法的总数。初始化为0。for ( int i = 0; i = 100; i+) for (int j = 0; j 100) break; for ( int k = 0; k = 20; k+) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 46 页if (i + 2*j + 5*k) = 100) num+; cout 1 分 i 个; 2 分 j
12、 个; 5 分 k 个; 100) break ; cout num endl; return0; 2.25 输入两个整数,按由小到大的顺序输出。要求使用变量的引用。#include usingnamespace std; void swap( int &a, int &b) a = a + b; b = a - b; a = a - b; int main() int a, b; cin a b; if (a b) swap(a, b); cout a , b endl; return0; 2.26 用二分法求解f(x)=0 的根。精选学习资料 - - - - - - - - - 名师归纳总
13、结 - - - - - - -第 8 页,共 46 页#include usingnamespace std; double Fun( double x) return35*x + 25; / 假设 f(x)=35x+25 int main() double a, b; cin a; if (Fun(a) = 0) cout x = a b; while (Fun(a) * Fun(b) = 0); if (Fun(b) = 0) cout x = b b) a = a + b; b = a - b; a = a - b; while ( 1) if (Fun(a + b)/2) = 0) c
14、out x = (a + b)/2 endl; return0; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 46 页if (Fun(a) * Fun(a + b)/2) 0) b = (a + b)/2; if (Fun(b) * Fun(a + b)/2) 0) a = (a + b)/2; return0; 3.1 类声明的一般格式是什么?class类名 private : 私有数据成员和成员函数public : 公有数据成员和成员函数 3.2 构造函数和析构函数的主要作用是什么?它们各自有什么特性?构造函数是一种特殊的成员函
15、数,它主要用于为对象分配空间,进行初始化。构造函数的名字必须与类名相同,而不能由用户任意命名。它可以有任意类型的参数,但不能具有返回值类型。析构函数通常用于执行一些清理任务,如释放分配给对象的内存空间等。析构函数名与类名相同,但它前面必须加一个波浪号。不能有返回值,也不能有参数。3.3 什么是对象数组?精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 46 页所谓对象数组,是指每一个数组元素都是对象的数组。3.4 什么是 this指针?它的主要作用是什么? C+为成员函数提供了一个名为this的指针,这个指针称为自引用指针。每当创建一个
16、对象时,系统就把this指针初始化为指向该对象。一个类的所有对象合用一份成员函数,this指针可以帮助对象辨别出当前调用的是自己的那个对象的数据成员和函数。3.5 友元函数有什么作用?友元函数可以在类的外部访问类的私有成员或保护成员。3.6 (1)声明并定义了 P2, P3, 并用默认无参构造函数初始化。(2)声明并定义了 P2, 并调用 Point 类的拷贝构造函数用P1对 P2进行初始化。(3)声明并定义了 P2, 并调用 Point 类的拷贝构造函数用P1对 P2进行初始化。(4)调用拷贝构造函数,将P1的成员值赋值给 P4的成员。3.7-3.10 BCCB 3.11-3.15 BAAB
17、A 3.16-3.17 BB 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 46 页3.18 10,20 30,48 50,68 70,80 90,16 11,120 3.19 Constructing 10 100 Destructing 3.20 3objects in existence 4objects in existence after allocation 3objects in existence after deletion 3.21 Counting at0 Counting at9 3.22 精选学习资料 -
18、- - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 46 页 Default constructor called. Default constructor called. Default constructor called. Construcotor:a=1,b=2 Construcotor:a=3,b=4 Construcotor:a=5,b=6 3.23 Con. Copy con. default. Copy con. 3.24 A=5 B=14 A=9 B=14 3.25 5,7 22.25 3.26 精选学习资料 - - - - - - -
19、- - 名师归纳总结 - - - - - - -第 13 页,共 46 页 Constructing Constructing A=5 B=15 A=10 B=15 Destructing Destructing 3.27 void pintStu();函数只有声明,没有定义。 age 是私有成员,不能用对象直接调用。3.28 void printStu() 和 void setSno(int s) 没有加限定符Student: void setAge(int a)在类中没有声明3.29 构造函数不能定义为私有。否则无法创建对象。3.30 下面是一个计算器类的定义,请完成该类成员函数的实现。c
20、lass counter 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 46 页public : counter(int number); void increment(); / 给原始值加 1void decrement(); / 给原始值减 1int getvalue(); / 取的计数器值int print(); / 显示计数private : int value; ; counter:counter(int number) value = number; void counter:increment() +value; vo
21、id counter:decrement() -value; int counter:getvalue() return value; int counter:print() cout value endl; return value; 3.31 根据注释语句提示,实现类Date 的成员函数#include usingnamespace std; class Date public : void printDate(); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 46 页void setDay( int d); void set
22、Month( int m); void setYear( int y); private : int day, month, year; ; void Date:printDate() cout 今天是 year 年 month 月 day 日 endl; void Date:setDay(int d) day = d; void Date:setMonth(int m) month = m; void Date:setYear(int y) year = y; int main() Date testDay; testDay.setDay(5); testDay.setMonth(10);
23、testDay.setYear(2003); testDay.printDate(); return0; 3.32 建立类 cylinder, cylinder 的构造函数被传递了两个double 值,分别表示圆柱体的半径和高度。用类cylinder 计算圆柱体的体积,并存储在一个double 变量中。在类cylinder 中包含一个成员函数vol,用来显示每个cylinder 对象的体积。constint PI = 3.14 ; class cylinder 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 46 页private :
24、 double radius, height, volume; public : cylinder(int rad, int hei); double getVolume(); void vol(); ; cylinder:cylinder(int rad, int hei) radius = rad; height = hei; double cylinder:getVolume() volume = PI * radius * radius *height; return volume; void cylinder:vol() cout 圆柱体的体积是: volume endl; 3.33
25、 构建一个类book,其中包含有两个私有数据成员qu 和 price,将 qu 初始化为15,将 price 初始化为qu 的 10 倍,建立一个有5 个元素的数组对象。显示每个对象数组元素的 qu*price 值。class book private : int qu, price; public : book(int qu); int mult(); ; book:book( int q) if (q 5) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 46 页 qu = 1; else qu = q; price = 10 *
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年完整word版 C+面向对象程序设计教程-陈维兴 林小茶课后习题答案 2022 完整 word C+ 面向 对象 程序设计 教程 陈维兴 林小茶 课后 习题 答案
限制150内