C++面向对象程序设计教程—-陈维兴-林小茶课后习题答案.docx

上传人:太** 文档编号:96986747 上传时间:2024-04-07 格式:DOCX 页数:85 大小:50.93KB
返回 下载 相关 举报
C++面向对象程序设计教程—-陈维兴-林小茶课后习题答案.docx_第1页
第1页 / 共85页
C++面向对象程序设计教程—-陈维兴-林小茶课后习题答案.docx_第2页
第2页 / 共85页
点击查看更多>>
资源描述

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

1、C+面向对象程序设计教程课后题答案什么是面向对象程序设计面向对象程序设计是一种新的程序设计范型.这种范型的主要特征 是:程序二对象+消息面向对象程序的基本元素是对象。主要结构特点是:第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的。什么是对象什么是类对象与类之间的关系是什么对象是描述其属性的数据以及对这些数据施加的一组操作封装在一 起构成的统一体。类就是具有相同的数据和相同的操作的一组对象的集合,也就是说, 类是对具有相同数据结构和相同操作的一类对象的描述。上面这个程序,初看应该输出T2 is 0但是实际上,得出T2 is 2如果把#def i

2、ne换成const, 则可以输出想要的结果。用动态分配空间的方法,计算Fibonacci数列的前20项,并存储到 动态分配的空间中。心#i ncIude us i ng namespace std;i nt ma i n ()(i nt *p i = new i nt 20;*pi = 1;pi 1= 1 ;for (int i = 2; i 20; i+)pii=pii-2+pii-1;)return 0;)重载sroot函数,输出一个数的二次方根。#include using namespace std;doubIe sroot(int num)return (doubIe)sqrt (d

3、oubIe)num);doubIe sroot (Iong num)return (doubIe)sqrt(doubIe) num);)doubIe sroot (doubIe num)(return (doubIe)sqrt(num);)i nt ma i n ()(return 0;)心解决百钱问题。将一元人民币换成1、2、5分的硬币,有多少种换法#i ncIude us i ng namespace std;i nt ma i n ()(int num = 0;4书DefauIt constructor caI Ied.Default constructor caI Ied.Constr

4、ucotor:a=1, b=2Construcotor:a=3, b=4Construcotor:a=5, b=6Con.Copy con.default.Copy con.A=5B二 14A二 9B二 145,7Construct i ngConstruct i ngA=5B=15A=10B=15Destruct i ngDestruct i ngvoid pintStu ();函数只有声明,没有定义。age是私有成员,不能用对象直接调用。void pr i ntStu () 和 void setSno (i nt s) 没有 加限定符Student:vo i d setAge (i nt

5、a)在类中没有声明构造函数不能定义为私有。否则无法创建对象。下面是一个计算器类的定义,请完成该类成员函数的实现。cI ass counter pub I ic:counter (i nt number);void i ncrement 0 ;电。电电。电14代() ;)电修改,通过对象指针访问对象数组,使程序以相反的顺序显示每个 对象数组元素的qu*pr i ce值。电cI ass book(pr i vate:int qu, price;pub lie:book (i nt qu);i nt mu 11 ();book:book (int q)if (q 5) e I sequ = q;)

6、pr ice = 10 * qu;i nt book: :mu 11 ()(return qu * price;)i nt ma i n ()(book books 5=1,2, 3, 4, 5;book *p = books;P + 二 4;for (int i = 0; i mu11 0 -p;return 0;)电构建一个类Stock,含字符数组stockcode及整型数组成员quan、 双精度型数据成员priceo构造函数含3个参数:字符数组na 口及q、 po当定义Stock的类对象时,将对象的第一个字符串参数赋给数据 成员stockcode,第2和第3个参数分别赋给quan、pri

7、ce。未设置 第2和第3个参数时,quan的值为1000, pr ice的值为.成员函数pr int 没有形参,需使用this指针,显示对象数据成员的内容。编写程序 显示对象数据成员的值。电#i ncIude us i ng namespace std;cI ass Stock pr i vate: 类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽 象的结果,一个对象是类的一个实例。现实世界中的对象有哪些特征请举例说明。现实世界中的对象具有以下特征:1) 每一个对象必须有一个名字以区别于其他对象;2) 用属性来描述对象的某些特征;3) 有一组操作,每组操作决定对象的一种行为;4)

8、对象的行为可以分为两类:一类是作用于自身的行为,另一类是作用于其他对象的行为。例如一个教师是一个对象。每个教师对象有自己的名字来和别的教师 区别。教师具有编号,姓名,年龄,职称,专业等属性。教师拥有走 路,吃饭,授课等行为操作。走路,吃饭是作用于自身的行为,授课 是作用于其他对象的行为。什么是消息消息具有什么性质一个对象向另一个对象发出的请求成为“消息”。char stockcode25;int quan;doubIe price;pub Iic:Stock (char na, int q = 1000, double p =;Stock (char na );void pr int ();)

9、;Stock:Stock (char na , i nt q = 1000, doubIe p =strcpy (stockcode, na);quan = q;price = p;void Stock: : pr i nt ()(cout stockcode: th i s-stockcode quan: th i s-quan price: th i s-pr i ce end I;)i nt ma i n ()(Stock stockl (600001, 3000,;Stock stock2(600002);0;0;return 0;编写一个程序,已有若干学生的数据,包括学号、姓名、成绩

10、,要 求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人 数和总成绩用静态数据成员表示)。电#i ncIude us i ng namespace std;cI ass student(pr i vate:char name25, studentNo10;int score;static int sum;static i nt total Score;pub Iic:student (char na , char stuNo, i nt sc);void show0 ;static void showTotaI (););student:student (charna 口,char

11、stuNo, i nt sc)strcpy (name, na);strcpy (studentNo, stuNo);score - sc;+sum;totaI Score += sc;)vo i d student:show 0cout 姓名: name end I ;cout ”学号:VI studentNo end I;cout 成绩:score end I ;)void student:showTotal ()(cout 总人数: sum end I ;cout ”平均成绩:“ (doub I e) tota I Score/sum end I ;)int student:sum =

12、0;i nt student:totaI Score = 0;i nt ma i n ()(student s1 (“张无忌,H111254, 75);student s2(“李莫愁“,254114”,60);student s3(“小龙女”,112587”,88);0;0;0;student: : showTota I ();return 0;)有哪几种继承方式每种方式的派生类对基类成员的继承性如何公有继承,私有继承和保护继承。基类的私有成员,无论哪种继承方式都不能访问。公有继承不改变基类的公有和保护成员的访问限 制。私有继承将基类的公有和保护成员都变成私有。保护继承将基类的公有和保护成员都

13、变成保护。派生类能否直接访问基类的私有成员若否,应如何实现不能。可以在基类里添加一个公有成员函数来访 问私有成员,派生类就能继承这个公有成员函数,实现对基类私有成 员的访问。保护成员有哪些特性保护成员以公有方式或私有方式继承后的访问 特性如何保护成员只能被本类或本类的派生类所访问,在 类或派生类外是不能被访问的。后面一问见第一题的答案。派生类构造函数和析构函数的执行顺序是怎样的构造函数是先执行父类的构造函数,再执行类中 其他类对象的构造函数,再执行本类的构造函数。如果同级有多个构 造函数,则按声明顺序执行。析构函数与构造函数的执行顺序刚好相反。派生类构造函数和析构函数的构造规则是怎样的派生类名

14、(参数总表):基类名(参数总表)派生类新增数据成员的初 始化语句)派生类中的析构函数与基类无关。什么是多继承多继承时,构造函数与析构函数的执行顺序是怎样的多继承是指一个类同时继承自多个不同的基类。执行顺序同在类的派生中为何要引入虚基类虚基类构造函数的调用顺序是如何 规定的如果一个类有多个直接基类,而这些直接基类又 有一个共同的基类,则在最底层的派生类中会保留这个简介的共同基 类数据成员的多份同名成员。在访问这些同名成员的时候,会产生二 义性。为了解决二义性,引入了虚基类。1) 如果虚基类中定义有带形参的构造函数,并且 没有定义默认形式的构造函数,则整个继承结构中,所有直接或间接 的派生类都必须

15、在构造函数的成员初始化表中列出对虚基类构造函 数的调用,以初始化在虚基类中定义的数据成员。2) 建立一个对象时,如果这个对象中含有从虚基 类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调 用虚基类的构造函数进行初始化的。该派生类的其他基类对虚基类构 造函数的调用都自动被忽略。3) 若同一层次中同时包含虚基类和非虚基类,应 先调用虚基类的构造函数,再调用非虚基类的构造函数,最后调用派 生类的构造函数。ACCBConstructor B1.Constructor B2.Constructor A.主食二bread副食二steak0,0,00,1,03,6,9Constructor B1

16、.Constructor B2.Constructor B3.Constructor A.消息具有以下3个性质:1) 同一个对象可以接收不同形式的多个消息,做出不同的相应;2) 相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;3) 对消息的响应并不是必须的,对象可以响应消息,也可以不响应。什么是抽象和封装请举例说明。抽象是将有关事物的共性归纳、集中的过程。例如:把所有具有大学生学籍的人归为一类,成为“大学生”,这就 是一个抽象。封装是指把数据和实现操作的代码集中起来放在对象内部,并尽可能 隐藏对象的内部细节。例如:每一台洗衣机都有出厂日期、机器编号等属性,也有启动、暂 停、选择等

17、操作。人们在使用洗衣机的时候只需要按下对应的按钮, 而不用关心具体的内部实现。这就是封装。24,34(1,2)5,6(6, 9)cI ass baselcI ass base2cI ass I eve 12 cI ass base2cI ass I eve 11 cI ass top I eve I电#i ncIude us i ng namespace std;#i ncIude cI ass tab Ie(pub I ic:tab Ie (i nt p, int q)(1 = P; j = q;vo i d asc i i (vo i d);protected:int i, j;1;voi

18、d table: :asci i ()(i nt k = 1 ;for (; i = j; i+)(cout setw(4) i (char) i;if (k)%12 = 0)(cout n;) k+;cout rT;)cI ass der_table:publ ic tab Ie(pub Iic:der_table(int p, i nt q, char *m) : tab Ie (p, q)(c = m;)void pr int ();protected:char *c;);void der_tabIe:pr int()cout c nnH;table:asci i 0;) i nt ma

19、 i n ()(der_tabIe ob(a, z, ASCI I vaIuechar);0;return 0;)#i ncIude us i ng namespace std;#i ncIude cI ass area_c1(protected:doubIe height;doubIe width;pub I ic:area_c1 (doubIe r, doubIe s) (he i ght = r;width = s;)vi rtuaI doubIe area 0 = 0;);cI ass rectangle : pub Ii c area_c1 pub Iic:rectang Ie (d

20、ouble r, doub I e s) : area_c1 (r, s) vi rtuaI doubIe area 0;);doubIe rectangle:area()(return height * width;)cI ass i sosceIes : pub I i c area_c1(pub Iic:i sosce I es (doub I e r, doub I e s) : area_c1 (r, s) vi rtuaI doubIe area 0;doub I e i sosce I es: : area ()(return (height * width)/2;)i nt m

21、a i n ()(rectangle r (10, 5);i sosce I es i (4, 6);area_c1 *a;a = &r;cout矩形的面积是: a-area () end I ;a 二 &i ;cout ”三角形的面积是:“ a-area () end I ;return 0;#i ncIude us i ng namespace std;#i ncIude cI ass Timepub I ic:Time (i nt h,i nt m, i nt s)hours = h;minutes = m;seconds = s;void d i spI ay 0(cout 出生时间:

22、 hours 时 minutes 分, seconds 秒 end I ;)protected:int hours, minutes, seconds;1;cI ass Date(pub I ic:Date (i nt m, i nt d, i nt y)month = m;什么是继承请举例说明。继承就是允许派生类使用基类的数据和操作,同时,派生类还可以增 加新的操作和数据。例如:哺乳动物是一种热血、有毛发、用奶哺育幼崽的动物;狗是 有犬牙、食肉、特定的骨骼结构、群居的哺乳动物。狗就继承了哺 乳动物。若类之间具有继承关系,则他们之间具有什么特征若类之间具有继承关系,则他们之间具有下列几个特征:

23、1) 类间具有共享特征(包括数据和操作代码的共享);2) 类间具有差别或新增部分(包括非共享的数据和操作代码);3) 类具有层次结构。什么是单继承、多继承请举例说明。单继承是指每个派生类只直接继承了 一个基类的特征0例如狗继承自 哺乳动物。day = d;year = y;)vo i d d i spI ay 0(cout ”出生年月: year 年 month 月” day 日 end I;)protected:1 nt month, day, year;1;cI ass Bi rtht ime : pub I ic Time, pub I ic Date pub Iic:Bi rtht i

24、me (char name , i nt m, i nt d, int y, i nt h, i nt mi,int s) : Time (h, mi, s), Date (m, d, y)(strcpy (Ch i Idname, name);)void showName 0(cout 我的名字是: Chi Idname end I ;1pr ivate:char ChiIdname25;);i nt ma i n ()Bi rtht ime b (uxiaomi ng 3, 6, 2012, 11, 12, 42);0;:display0;:display 0 ;return 0;)#i

25、ncIude us i ng namespace std;#i ncIude cI ass person protected:char number 25;char name 25;pub Iic:person (char num, char na )(strcpy(number, num);strcpy (name, na);)void showName 0( name;cout 编号: number 姓名:)1;cI ass student : pub I i c person pr ivate:int cIassNumber, score;pub I ic:student (char n

26、um, char na 口, i nt eNumber, sc):person(num, na)(cIassNumber = eNumber;score = sc;)void show0(showName ();cout 班号:c I assNumber 成绩: end I ;i ntscore);cI ass teacher : pub I i c person pr i vate:char title 25, department 25;pub I ic:teacher (char num, char na , char t it , char depart ) : person (num

27、, na)(strcpy (title, tit);strcpy (department, depart);)void show0(showName ();cout 职称: title 部门:” department)C+第五章习题1.什么是静态联编什么是动态联编静态联编是指系统在编译时就决定如何实现某一 动作。动态联编是指系统在运行时动态实现某一动作。1.编译时的多态性与运行时的多态性有什么区别他们的实现方式 有什么不同静态联编支持的多态性称为编译时多态性,也称静态多态性。编译时 多态性是通过函数重载和模板实现的。动态联编所支持的多态性称为运行时多态性,也称动态多态性。是通 过虚函数来实现的

28、。1.简述运算符重载规则。b)C+只能对已有的C+运算符进行重载。c) 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造完成。应与原有的功能相类似。d) 重载不能改变运算符的操作对象的个数。e) 重载不能改变运算符原有的优先级。f) 不能改变原有的结合特性。g) 参数至少应有一个是类对象。h) 重载函数可以是普通函数,也可以是类的成员函数,也可以是类的友元函数。i) 一般用于类对象的运算符除了赋值运算符都要重载。1 .友元运算符函数和成员运算符函数有什么不同a) 对于双目运算符,成员运算符重载含有一个参数,友元重载含有两个参数;对于单目运算符,成员重载没有参数, 友元重载有一个

29、参数。b) 双目运算符一般可以被重载为友元或成员。但 是如果将一个对象和一个普通类型运算,必须重载为友元。c)调用方式不同。d)一般,双目运算符用友元,单目运算符用成员。如果操作数有隐式类型转换,则必须用友元。1.什么是虚函数虚函数与函数重载有哪些相同点与不同点虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义 的函数。函数名都相同。重载函数的参数个数或参数类型必须有所不同。虚函数要求函数名, 返回类型,参数个数,参数的类型和顺序与基类中的虚函数原型完全 相同。1.什么是纯虚函数什么是抽象类纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但 要求在它的派生类中根据需要

30、对它进行定义,或仍说明为纯虚函数。如果一个类至少有一个纯虚函数,那么就称这个类为抽象类。7-12 DAADCC13.不对,参数个数必须一样。76This is c+book.第一个字符:T第16个字符:.第26个字符:数组下标超界!m二千米多继承是指多个基类派生出一个派生类的继承关系。比如玩具车同时 继承自玩具和车。什么是多态请举例说明。多态是指不同的对象收到相同的消息时执行不同的操作。例如,有一个窗口类对象,还有一个棋子类对象。当我们发出“移动” 消息时,两个对象的行为不同。面向对象程序设计的主要优点是什么1 .可提高程序的重用性;2 .可控制程序的复杂性;3,可改善程序的可维护性;4 .能

31、够更好地支持大型程序设计;5,增强了计算机处理信息的范围;能够很好地适应新的硬件环境。简述C+的主要特点。17.#i ncIude us i ng namespace std;cI ass twoDArray(i nt a 2 3;pub Iic:twoDArray 0(for (int i = 0; i 2; i +)for (int j = 0; j 3; j +) ai j= 5;) twoDAr ray (i nt b 3)for (int j = 0; j 3; j +) aij二 bij;1void show0;twoDArray operator+ (twoDArray n);t

32、woDArray operator- (twoDArray n););void twoDArray:show()(for (int i = 0; i 2; i +)(for (int j = 0; j 3; j +)cout ai j;cout end I;)twoDArray twoDArray:operator+(twoDArray n) (twoDArray temp;for (int i = 0; i 2; i +)for (int j = 0; j 3; j +) ij= aij +return temp;)twoDArray twoDArray:operator-(twoDArra

33、y n) (twoDArray temp;for (int j = 0; j 3; j +)return temp;)i nt ma i n ()(int a2 3;for (int i = 0; i 2; i +)for (int j = 0; j 3; j +) cin ai j;twoDArray a1, a2 (a), totaI, sub;totaI = a1 + a2;sub = a1 - a2;0;0;return 0;)电电#i ncIude us i ng namespace std;cI ass twoDArray(int a2 3;pub Iic:twoDAr ray (

34、)(for (int i = 0; i 2; i +)ai j = 5;)twoDArray (i nt b 3)(for (int i = 0; i 2; i +)for (int j = 0; j 3; j +)aij = bij;1void show0 ;fr iend twoDArray operator+ (twoDArray m, twoDArray n);fr iend twoDArray operator- (twoDArray m, twoDArray n););void twoDArray:show()for (int i = 0; i 2; i +)for (int j

35、= 0; j 3; j +)cout ai j;cout end I;)twoDArray operator+ (twoDArray m, twoDArray n) (twoDArray temp;for (int i = 0; i 2; i +)for (int j = 0; j 3; j +)ij二ij +return temp;) twoDArray operator-(twoDArray m, twoDArray n) twoDArray temp;for (int i = 0; i 2; i +)for (int j = 0; j 3; j +) ij = ij -return te

36、mp;1i nt ma i n ()(int a2 3;for (int i = 0; i 2; i +)for (int j = 0; j 3; j +) cin ai j;twoDArray a1, a2 (a), totaI, sub;totaI = a1 + a2;sub = a1 - a2;0;0;return 0;)o#i ncIude us i ng namespace std;cI ass comp I ex(doubIe reaI, imag;pub Iic:rea Ireimag = im;)fr i end comp I ex operator+ (comp I ex a

37、, comp I ex b);void pr int (););comp I ex operator+ (comp I ex a, comp I ex b)(return comp I ex + ,+ ;)void complex:pr int 0cout real 丁 imag “ end I;2)保持了 C的简洁、高效和接近汇编语言等特点, 并对C的功能作了不少扩充。用C+编写的程序比C更安全,可读性 更好,代码结构更为合理。3) 程序质量高。4) 增加了面向对象机制。#i ncIude us i ng namespace std;i nt ma i n ()1int a, b, d, m

38、in;cout Enter two numbers:n;cin a b;a;i nt ma i n ()comp I ex d,;comp I ex c2,;comp I ex totaI = d + c2;0;return 0;)20.电#i ncIude us i ng namespace std;cI ass Conta i ner protected:double r, d;如果是圆柱体,r为底面半径,d为高。如果是正 方体,r为边长,d为0。pub Iic:Conta i ner (doubIe a, doubIe b = 0) ( r = a;d = b;)vi rtua I do

39、ub I e serface () = 0; cerr 和 cI og 间的区别是 cerr不经过缓冲区直接显示错误信息。而clog存放在缓冲区,缓冲区满或遇上endl时再输出。C+提供哪两种控制输入输出格式的方法一种是使用ios类中的有关格式控制的流成员函 数进行格式控制,另一种是使用称为操纵符的特殊类型的函数控制。C+进行文件输入输出的基本过程是什么首先创建一个流对象,然后将这个流对象与文件 相关联,即打开文件,此时才能进行读写操作,读写操作完成后再关 闭这个文件。BCA电#i ncIude #i ncIude us i ng namespace std;i nt factor i a I

40、 (i nt n)if(n = 0 | | n = 1)return n;return factor i a I(n-1)*n;)i nt ma i n ()(for (i nt i = 1; i = 9; i+)(cout setw(5) factor ial (i);if (i % 3 = 0)(cout end I;) return 0;# i ncIude # i ncIude us i ng namespace std;i nt ma i n ()(for (int i = 1; i二 7; i+)(cout setw(16-i);for (int j = 1; j = (2*i -

41、 1); j+)cout A;cout end I;) return 0;)# i ncIude # i ncIude us i ng namespace std;cI ass matr i x(pr i vate:i nt data2 3;pub lie:matr i x () f r i end ostream &operator(ostream &, matr i x &);f r iend i stream &operator(i stream &, matr i x &);fr i end matr i x operator+ (matr i x &, matrix &););ost

42、ream &operator(ostream &os, matr i x &a)for (int i = 0; i 2; i+)for (int j = 0; j 3; j+)os i j os end I;return os;)i stream &operator(i stream & i n, matr i x &a)(cout 请输入一个2行3列矩阵: endl ;for (int i = 0; i 2; i +)(for (int j = 0; j 3; j+)(in i j;)1 return in;matr i x operator+ (matr i x &a, matr i x &b)matr i x temp;for (int i = 0; i 2; i+)(for (int j = 0; j 3; j+)(ij=ij + ij;1)return temp;1i nt ma i n 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