收藏 分享(赏)

《C 面向对象程序设计》习题与上机解答-提交稿-陈维兴.doc

上传人:dzzj200808 文档编号:2735307 上传时间:2018-09-26 格式:DOC 页数:98 大小:617KB
下载 相关 举报
《C  面向对象程序设计》习题与上机解答-提交稿-陈维兴.doc_第1页
第1页 / 共98页
《C  面向对象程序设计》习题与上机解答-提交稿-陈维兴.doc_第2页
第2页 / 共98页
《C  面向对象程序设计》习题与上机解答-提交稿-陈维兴.doc_第3页
第3页 / 共98页
《C  面向对象程序设计》习题与上机解答-提交稿-陈维兴.doc_第4页
第4页 / 共98页
《C  面向对象程序设计》习题与上机解答-提交稿-陈维兴.doc_第5页
第5页 / 共98页
点击查看更多>>
资源描述

1、1C+面向对象程序设计习题与上机实验题解答陈维兴 陈昕 编著人民邮电出版社2目 录第 1章 面向对象方法概述1.1 习题参考解答第 2章 C+的初步知识2.1 习题参考解答2.2 上机实验题参考解答第 3章 类和对象3.1 习题参考解答3.2 上机实验题参考解答第 4章 类和对象的进一步讨论4.1 习题参考解答4.2 上机实验题参考解答第 5章 继承与派生5.1 习题参考解答5.2 上机实验题参考解答第 6章 多态性与虚函数6.1 习题与参考解答6.2 上机实验题与参考解答第 7章 运算符重载7.1 习题参考解答7.2 上机实验题参考解答第 8章 模板8.1 习题参考解答8.2 上机实验题参考

2、解答第 9章 C+的输入和输出9.1 习题参考解答9.2 上机实验题参考解答第 10章 异常处理和命名空间10.1 习题参考解答10.2 上机实验题参考解答第 11章 综合设计与实现11.1 习题参考解答11.2 上机实验题参考解答3第 1 章 面向对象方法概述1.1 习题参考解答【1.1】【解】面向过程程序设计的主要特征是:程序由过程定义和过程调用组成(所谓过程,简单地说,就是程序执行某项操作的一段代码,函数是最常用的过程。 ),从这个意义出发, 基于面向过程的程序可以用以下的公式来表述:程序 = 过程 + 调用【1.2】【解】面向过程程序设计中普遍采用的优化方法是使用结构化程序设计方法,其

3、局限性至少有以下几个方面:(1) 面向过程程序设计方法开发软件的生产效率低下(2) 面向过程程序设计方法难以应付日益庞大的信息量和多样的信息类型(3) 面向过程程序设计方法难以适应各种新环境【1.3】 【解】面向对象程序设计是一种新的程序设计范型。这种范型的主要特征是:程序 = 对象 + 消息对于面向对象的程序设计,程序员注重的是类的设计和编写,即问题域中涉及几个类,各个类之间的关系如何,每个类包含哪些数据和函数(操作代码) ,再由类生成其对象。程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法(通过成员函数)完成相应的操作。【1.4】【解】现实世界中的对象,具有以

4、下特性:(1) 有一个名字:每一个对象必须有一个名字,称为对象名,以区别于其他对象;(2) 有一组属性:用属性来描述它的某些特征,一般可以用数据来表示,所有的属性都有值;(3) 有一组行为: 对象的行为或功能也称为方法,一般用一组操作来描述;(4) 有一组接口:除施加于对象内部的操作外,对象还提供了一组公有操作用于与外界接口,从而可以与其他对象建立关系。【1.5】【解】在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。 “类”就是具有相同的数据(属性)和相同的操作代码(函数)的一组对象的集合。类和对象之间的关系是抽象和具体的关系。类是多个对象进行综

5、合抽象的结果,一个对象是类的一个实例。【1.6】 什么是消息?4【解】面向对象程序设计技术必须提供一种机制允许一个对象与另一个对象的交互。这种机制叫消息传递。一个对象向另一个对象发出的请求被称为“消息” 。【1.7】 【解】在面向对象程序设计中的消息传递实际是对现实世界中的信息传递的直接模拟。调用对象中的函数就是向该对象传送一个消息,要求该对象实现某一行为(功能)。对象所能实现的行为(功能),在程序设计方法中称为方法,它们是通过调用相应的函数来实现的,在 C+语言中方法是通过成员函数来实现的。【1.8】 【解】在面向对象程序设计中,抽象是通过特定的实例(对象)抽取共同特性后形成概念的过程。C

6、和 C+中的数据类型就是对一批具体的数的抽象。例如, “整型数据”是对所有整数的抽象。封装是面向对象程序设计方法的一个重要特性,所谓封装具有两方面的含义:一是将有关的数据和操作代码封装在一个对象中,各个对象相对独立、相不干扰。二是将对象中某些数据与操作代码对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽。信息隐蔽有利于数据安全,防止无关人员访问和修改数据。【1.9】 【解】以面向对象程序设计的观点,继承所表达的是类之间相关的关系。这种关系使得某一类可以继承另外一个类的特征和能力。若类之间具有继承关系,则它们之间具有下列几个特性:(1)

7、 类间具有共享特征(包括数据和操作代码的共享);(2) 类间具有差别或新增部分(包括非共享的数据和操作代码);(3) 类间具有层次结构。【1.10】 【解】从继承源来分,继承分为单继承和多继承。单继承是指每个派生类只直接继承了一个基类的特征。例如,图 1.1表示了一种单继承关系。它表示 Windows操作系统的窗口之间的继承关系。图 1.1 单继承示意图多继承是指多个基类派生出一个派生类的继承关系。多继承的派生类直接继承了不止一个基类的特征。例如,小孩喜欢的玩具车即继承了车的一些特性,还继承了玩具的一些特征。如图 1.2所示。窗口编辑窗口 对话窗口5图 1.2 多继承示意图【1.11】【解】多

8、态性是面向对象程序的重要特征。多态性是指不同的对象收到相同的的消息时执行不同的操作。例如,我们同样双击 Window系统桌面上的图标时,有的是打开多媒体播放器,有的是打开资源管理器。多态性增强了软件的灵活性和重用性,为软件的开发与维护提供了极大的便利。尤其是采用了虚函数和动态联编机制后,允许用户以更为明确、易懂的方式去建立通用的软件。【1.12】 【解】面向对象程序设计的优点主要包括以下几个方面:(1) 可提高程序的重用性面向对象程序设计方法能比较好地解决软件重用的问题。对象所固有的封装性和信息隐藏等机理,使得对象内部的实现与外界隔离,具有较强的独立性,它可以作为一个大粒度的程序构件,供同类程

9、序直接使用。有两种方法可以重复使用一个对象类:一种方法是建立在各种环境下都能使用的类库,供相关程序直接使用;另一种方法是从它派生出一个满足当前需要的新类。继承性机制使得子类不仅可以重用其父类的数据和程序代码,而且可以在父类代码的基础上方便地修改和扩充,这种修改并不影响对原有类的使用。(2) 可控制程序的复杂性面向对象程序设计方法采用了封装和信息隐藏技术,把数据及对数据的操作放在一个个类中,作为相互依存、不可分割的整体来处理。这样,在程序中任何要访问这些数据的地方都只需简单地通过传递信息和调用方法来进行,这就有效地控制了程序的复杂性。(3) 可改善程序的可维护性在面向对象程序设计方法中,对对象的

10、操作只能通过消息传递来实现,所以只要消息模式即对应的方法界面不变,方法体的任何修改不会导致发送消息的程序修改,这显然对程序的维护带来了方便。另外,类的封装和信息隐藏机制使得外界对其中的数据和程序代码的非法操作成为不可能,这也就大大地减少了程序的错误率。(4) 能够更好地支持大型程序设计类是一种抽象的数据类型,所以类作为一个程序模块,要比通常的子程序的独立性强的多,面向对象技术在数据抽象上又引入了动态连接和继承性等机制,进一步发展了基于数据抽象的模块化设计,使其更好地支持大型程序设计。(5) 增强了计算机处理信息的范围面向对象程序设计方法把描述事物静态属性的数据结构和表示事物动态行为的操作放在一

11、起构成一个整体,完整地、自然地表示客观世界中的实体。用类来直接描述现实世界中的类型,可使计算机系统的描述和处理对象从数据扩展到现实世界和思维世界的各种事物,这实际上大大扩展了计算机系统处理的信息量和信息类型。玩具 车玩具车6第 2 章 C+的初步知识2.1 习题参考解答【2.1】【解】C+语言的主要特点表现在两个方面,一是全面兼容 C,并对 C的功能作了不少扩允,二是增加了面向对象的机制。具体表现为:(1) C+是 C的超集,C+保持与 C的兼容,这就使许多 C代码不经修改就可以为 C+所用,用 C编写的众多的库函数和实用软件基本上可以不加修改地用于 C+。(2) C+ 是一个更好的 C,它保

12、持了 C的简洁、高效和接近汇编语言等特点,并对 C的功能作了不少扩允。用 C+编写的程序比 C更安全,可读性更好,代码结构更为合理。(3) 用 C+编写的程序质量高,从开发时间、费用到形成的软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发变得更加容易。(4) 增加了面向对象的机制, C+几乎支持所有的面问对象程序设计特征,体现了近 20年来在程序设计和软件开发领域出现的新思想和新技术。C+语言最有意义的方面是支持面向对象的特征,然而,由于 C+与 C保持兼容,使得 C+不是一个纯正的面向对象的语言,C+既可用于面向过程的结构化程序设计,也可用于面向对象的程序

13、设计。【2.2】 【解】#include /编译预处理命令using namespace std; /使用命令空间 stddouble circle(double r) /定义函数 circle return 3.14*r*r;double triangle(double h,double w) /定义函数 triangle return 0.5*h*w;int main() /定义主函数 main double r,h,w;double cs,ts;coutrhw; /输入圆的半径和三角形高和底的值cs= circle(r); /调用函数 circlets= triangle(h,w); /

14、调用函数 trianglecout#includeusing namespace std;int main()float x,y;coutxy;float z=pow(x,y);cout using namespace std;int main()10 int *p=new int20; /动态分配 20个整型内存空间*p=1;*(p+1)=1; /对前面 2个内存空间赋值 1cout #include using namespace std;double sroot(int i) return sqrt(i);double sroot(long l) return sqrt(l); doub

15、le sroot(double d) return sqrt(d);int main() int i=12;long l=1234;double d=12.34;coutClose Workspace(关闭工作区)”命令,则结束对该程序的的操作。若要退出 VC+环境,则执行“File(文件)-Exit(退出)”命令。【运行结果】Hello!This is a program.【2.2】 【错误分析】编译程序,提示有 4个 error错误,1 个 warming错误。 编译出错信息告知在第 3行有 2个 error错误,第 1个错误的原因是 cout未经声明,第2个错误的原因是运算符“12usi

16、ng namespace std; 编译出错信息告知在第 5行有 2个 error错误。第 1个 error错误的原因是运算符“using namespace std;int main() coutusing namespace std;int main() int x,y;x=5;y=6;int z=x*y;coutusing namespace std;int main() int x,y;x=5;13y=6;int z=x*y;coutusing namespace std;int main() void fun(int,intint x,y;fun(3,x);fun(4,y);cout

17、using namespace std;int main() void fun(int,intint x,y;fun(3,x);fun(4,y);coutusing namespace std;int maxl(int x,int y) return(xy ? x:y);int maxl(int x,int y,int z) int temp=maxl(x,y);return(tempz ? temp:z);double maxl(double x,double y) return(xy ? x:y);double maxl(double x,double y,double z) double

18、 temp=maxl(x,y);return(tempz ? temp:z);char maxl(char x,char y) return(xy ? x:y);int maxl(char x,char y,char z) int temp=maxl(x,y);return(tempz ? temp:z);int main() int x1,x2;double d1,d2;char c1,c2;x1=maxl(3,5);x2=maxl(4,5,8);c1=maxl(a,b);c2=maxl(d,e,h);d1=maxl(3.1,5.6);15d2=maxl(15.3,13.4,27.8);co

19、utusing namespace std;void change(charint main() char x,y;cinxy;if(xusing namespace std;int main()16 double *r;r=new double;cin*r;cout using namespace std;class Circlepublic:Circle(float r)radius=r;float area()return 3.14*radius*radius;private:float radius;int main() float r;coutr;Circle p(r);cout u

20、sing namespace std;class cylinderpublic:cylinder(double a,double b);void vol();private:double r,h;double volume;cylinder:cylinder(double a,double b) r=a; h=b;volume=3.141592*r*r*h;void cylinder:vol() cout using namespace std;class Date public:Date() Date(int y,int m,int d) year=y;mon=m;day=d;Date(Da

21、temon=d.mon;20day=d.day;void SetDate(int Y,int m,int d) year=Y;mon=m;day=d;void printDate() coutusing namespace std;#includeclass magic /声明魔方类 magicpublic: void getdata(); /输入初值成员函数void setfirstmagic(); /设置初始魔方成员函数void generatemagic(); /生成最终魔方成员函数void printmagic(); /显示魔方成员函数private:int m44;int step;

22、 /相邻元素之间的差值int first; /起始值int sum; /最大元素值和最小元素值的和;void magic:getdata() /输入初值成员函数 coutfirst;coutstep;void magic:setfirstmagic() /设置初始魔方成员函数 int i,j;int tmp;tmp=first;for (i=0;i#includeusing namespace std;24const len=5;int main() int i;void Reverse(string s);string strlen=“Germany“,“Japan“,“America“,“

23、Britain“,“France“;cout using namespace std;class CTestpublic:CTest() x=20;void use_friend();private:int x;26friend void friend_f(CTest fri);void friend_f(CTest fri) fri.x=55;void CTest:use_friend() CTest fri;this-friend_f(fri); / 错误, 友元函数不是成员函数,/ 所以不能用 this-调用友元函数:friend_f(fri);int main() CTest fri,

24、fri1;fri.friend_f(fri); / 错误友元函数不是成员函数,/ 所以不能用“对象.函数名”调用友元函数friend_f(fri1);return 0;【4.15】【解】#include using namespace std;class CTestpublic:const int y2;CTest (int i1,int i2):y1(i1),y2(i2) y1=10; / 错误, y1 是用 const定义的,不能修改 x=y1;int readme() const;.private:int x;const int y1;int CTest:readme() const i

25、nt i;i=x;x+; / 错误,函数定义用了 const,表示该函数不能修改对象return x;int main() CTest c(2,8);int i=c.y2;27c.y2=i; / 错误, y2 是常量,不能修改i=c.y1; / 错误,y1 私有变量,不能直接存取return 0;【4.16】【解】本程序的运行结果如下:Init defaInit defaInit defaInit 35【4.17】 【解】实现本题功能的程序如下:#includeusing namespace std;class Studentpublic:Student(int n,float s):num(

26、n),score(s) void display();private:int num;float score;void Student:display()coutdisplay();return 0;本程序的运行结果如下:学号:1002 成绩: 75.5学号:1004 成绩: 99学号:1006 成绩: 86【4.18】【解】实现本题功能的程序如下: #include28using namespace std;class Student public:Student(int n,float s):num(n),score(s) int num;float score;int main() St

27、udent stu6=Student(1001,88.5),Student(1002,75.5),Student(1003,68.5),Student(1004,99.0),Student(1005,93.5),Student(1006,86.0);void max(Student*);Student* p=max(p);return 0;void max(Student* arr) float max_score=arr0.score;int k=0;for(int i=1;imax_score) max_score=arri.score; k=i;cout using namespace

28、std;class book public:book(int a, int b) qu= a;price= b;void show_money() cout using namespace std;class book public:book(int a, int b) qu= a;price= b;void show_money() coutshow_money();p-; return 0;本程序的运行结果如下:30250160904010【4.21】【解】实现本题功能的程序如下: #include #include using namespace std;class Studentpub

29、lic:Student(int n,string na,double d) no=n;deg=d;name=na;sum+=d;num+;static double avg() return sum/num;static int total() return num;void disp() coutno“ “name“ “degendl;private:int no; /学 号string name; /姓 名double deg; /成 绩static double sum; /总成绩static int num; /学生人数;double Student:sum=0;int Student:num=0;int main() Student s1(1001,“Zhou“,97),s2(1002,“Zhan“,65),s3(1003,“Chen“,88);cout“学号 姓名 成绩n“;s1.disp();s2.disp();s3.disp();cout“学生人数=“Student:total()endl;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报