C++面向对象程序设计教育资料(第3版-)陈维兴,林小茶课后习题'答案.doc

上传人:一*** 文档编号:808781 上传时间:2019-07-16 格式:DOC 页数:46 大小:104.77KB
返回 下载 相关 举报
C++面向对象程序设计教育资料(第3版-)陈维兴,林小茶课后习题'答案.doc_第1页
第1页 / 共46页
C++面向对象程序设计教育资料(第3版-)陈维兴,林小茶课后习题'答案.doc_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《C++面向对象程序设计教育资料(第3版-)陈维兴,林小茶课后习题'答案.doc》由会员分享,可在线阅读,更多相关《C++面向对象程序设计教育资料(第3版-)陈维兴,林小茶课后习题'答案.doc(46页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

6、 的兼容。2) 保持了 C 的简洁、高效和接近汇编语言等特点,并对 C 的功能作了 不少扩充。用 C+编写的程序比 C 更安全,可读性更好,代码结构更为合理。3) 程序质量高。4) 增加了面向对象机制。2.2#include using namespace std;int main() int a, b, d, min;cout a b;min = a b ? b : a;for(d = 2; d using namespace std;int main() int a = 1; #define T1 a+a #define T2 T1-T1cout using namespace std;i

7、nt main() int *pi = new int20;*pi = 1;pi1 = 1;for(int i = 2; i using namespace 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() return 0; 2.24 解决百钱问题。将一元人民币换成 1、2、5 分的硬币,有

8、多少种换法?#include using namespace std;int main() int num = 0; /总共换法的总数。初始化为 0。for(int i = 0; i 100)break;for(int k = 0; k 100)break;cout using namespace std;void swap(int b = a - b;a = a - b; int main() int a, b;cin a b;if(a b)swap(a, b);cout using namespace std;double Fun(double x) return 35*x +25; /假

9、设 f(x)=35x+25 int main() double a, b;cin a;if(Fun(a) = 0)cout b;while (Fun(a) * Fun(b) = 0);if(Fun(b) = 0)cout b)a = a + b;b = a - b;a = a - b;while(1)if(Fun(a + b)/2) = 0)cout using namespace std;class Date public:void printDate();void setDay(int d);void setMonth(int m);void setYear(int y); private

10、:int day, month, year; ; void Date:printDate() cout 5)qu = 1;elsequ = q;price = 10 * qu; int book:mult() return qu * price; int main() book books5 = 1,2,3,4,5;for(int i = 0; i 5)qu = 1;elsequ = q;price = 10 * qu; int book:mult() return qu * price; int main() book books5 = 1,2,3,4,5;book *p = books;p

11、 += 4;for(int i = 0; i mult() using namespace std;class Stock private:char stockcode25;int quan;double price; public:Stock(char na, int q = 1000, double p = 8.98);Stock(char na);void print(); ;Stock:Stock(char na, int q = 1000, double p = 8.98) strcpy(stockcode, na);quan = q;price = p; void Stock:pr

12、int() cout stockcode quan price using namespace std;class student private:char name25, studentNo10;int score;static int sum;static int totalScore; public:student(char na, char stuNo, int sc);void show();static void showTotal(); ;student:student(char na, char stuNo, int sc) strcpy(name, na);strcpy(st

13、udentNo, stuNo);score = sc;+sum;totalScore += sc; void student:show() cout using namespace std; #include class table public:table(int p, int q)i = p;j = q;void ascii(void); protected:int i, j; ; void table:ascii() int k = 1;for(; i using namespace std; #include class area_c1 protected:double height;

14、double width; public:area_c1(double r, double s)height = r;width = s;virtual double area() = 0; ;class rectangle : public area_c1 public:rectangle(double r, double s):area_c1(r, s)virtual double area(); ; double rectangle:area() return height * width; class isosceles : public area_c1 public:isoscele

15、s(double r, double s):area_c1(r, s)virtual double area(); ; double isosceles:area() return (height * width)/2;int main() rectangle r(10, 5);isosceles i(4, 6);area_c1 *a;a = coutarea() area() using namespace std; #include class Time public:Time(int h, int m, int s)hours = h;minutes = m;seconds = s;vo

16、id display()cout using namespace std; #include class person protected:char number25;char name25; public:person(char num, char na)strcpy(number, num);strcpy(name, na);void showName()cout using namespace std;class twoDArray int a23; public:twoDArray()for(int i = 0; i aij;twoDArray a1, a2(a), total, su

17、b;total = a1 + a2;sub = a1 - a2;total.show();sub.show();return 0; 18.#include using namespace std;class twoDArray int a23; public:twoDArray()for(int i = 0; i aij;twoDArray a1, a2(a), total, sub;total = a1 + a2;sub = a1 - a2;total.show();sub.show();return 0; 19.#include using namespace std;class comp

18、lex double real, imag; public:complex(double re, double im)real = re;imag = im;friend complex operator+(complex a, complex b);void print(); ;complex operator+(complex a, complex b) return complex(a.real + b.real, a.imag + b.imag); void complex:print() cout using namespace std;const double PI = 3.14;

19、class Container protected:double r, d; / 如果是球形,r 是半径,d 为 0. 如果是圆柱体,r 为底 面半径,d 为高。如果是正方体,r 为边长, d 为 0。 public:Container(double a, double b = 0)r = a;d = b;virtual double serface() = 0; / 计算表面积virtual double volume() = 0; /计算体积 ;class Sphere : public Container public:Sphere(double r):Container(r)doubl

20、e serface();double volume(); ; double Sphere:serface() return 4*PI*r*r; double Sphere:volume() return PI*r*r*r; class Cylinder : public Container public:Cylinder(double a, double b):Container(a, b)double serface();double volume(); ; double Cylinder:serface() return 2*PI*r*d + PI*r*r; double Cylinder

21、:volume() return PI*r*r*d; class Cube : public Container public:Cube(double a):Container(a)double serface();double volume(); double Cube:serface() return 6*r*r; double Cube:volume() return r*r*r; 7.1 C+为什么要有自己的输入输出系统?C+的编译系统对数据类型进行严格的检查,凡是类型不正确的数据 都不可能通过编译。C+中需要定义众多的用户自定义类型且能够输入输出。7.2 C+有哪 4 个预定义的流对

22、象?他们分别与什么具体设备相关联?标准输入流对象 cin、标准输出流对象 cout、非缓冲型的标准出错流 对象 cerr 和缓冲型的标准出错流对象 clog。cin 对应标准输入设备cout 对应标准输出设备cerr 对应标准错误输出设备clog 对应标准错误输出设备7.3. cerr 和 clog 间的区别是?cerr 不经过缓冲区直接显示错误信息。而 clog 存放在缓冲区,缓冲 区满或遇上 endl 时再输出。7.4 C+提供哪两种控制输入输出格式的方法?一种是使用 ios 类中的有关格式控制的流成员函数进行格式控制,另 一种是使用称为操纵符的特殊类型的函数控制。7.5 C+进行文件输入

23、输出的基本过程是什么?首先创建一个流对象,然后将这个流对象与文件相关联,即打开文件, 此时才能进行读写操作,读写操作完成后再关闭这个文件。7.6-7.8 BCA7.9#include #include using namespace std;int factorial(int n) if(n = 0 | n = 1)return n;return factorial(n-1)*n; int main() for(int i = 1; i #include using namespace std;int main() for(int i = 1; i #include using namespa

24、ce std;class matrix private:int data23; public:matrix()friend ostream friend matrix operator+(matrix ;ostream return in; matrix operator+(matrix for(int i = 0; i m1 m2;total = m1 + m2;cout #include using namespace std;int main() fstream fout(“stock.txt“,ios:out);if(!fout)cout #include using namespac

25、e std;int main() char str30;fstream in(“file1.txt“, ios:in);if(!in)cout str str;for(int i = 0; i str;in.close();out.close();return 0; 7.14#include #include using namespace std;int main() char str30;fstream in(“file1.txt“, ios:in);if(!in)cout str str;for(int i = 0; i str;in.close();out.close();return

26、 0; 7.15 不会。#include #include “buy.h“ #include “book.h“ using namespace std;class order private:int orderID;int buyerID;int listcount;string orderlist20;static int ordercount; public:order(buyer orderID = ordercount;buyerID = person.buyerID;listcount = bookNumber;for(int i = 0; i bookNumber; i+)orde

27、rlisti = bi.book_ID;void show()cout “订单编号: “ orderID “n 购书人编号: “ buyerID “n 购书数量: “ listcount endl;for(int i = 0; i listcount; i+)cout “书号: “ orderlisti endl; ; int order:ordercount = 0;int main() book *c20;book c1(“7-302-0145214-6“, “C 程序设计“, “谭浩强“, “清华“, 25);book c2(“7-302-0145214-7“, “C+程序设计“, “谭浩强“, “清华“, 28);c1 = c2 = layfolk b1(“林晓茶“, 1, “北京“, 0);order ord(b1, c, 2);order.show();return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com