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