已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+程序设计课程设计指导1. 任务描述和需求分析 用C+设计一个业务处理系统,其业务就是进行简单的几何计算:l 输入圆的半径,计算并输出圆的周长和面积;l 输入圆柱的半径和高,计算并输出圆柱的表面积和体积;l 输入圆球的半径,计算并输出圆球的表面积和体积;l 输入长方形的长和宽,计算并输出长方形的周长和面积;l 输入长方体的长、宽和高,计算并输出长方体的表面积和体积。 系统启动时显示版本等信息。设计要求: 必须应用类的继承和派生,尽力实现代码重用、减少重复; 必须设计一个抽象基类,在其中声明4个公共接口函数:计算周长、面积和体积的函数为虚或纯虚函数,显示输出结果的函数为纯虚函数; 必须设计圆、圆柱、圆球、长方形、长方体等类,实现各类的构造、计算、输出等函数; 能反复计算,除非用户选择退出。 分組完成设计(或者不分組,每个人独立完成设计)。一个星期的时间很紧,希望大家赶紧行动起来。希望大家首先一定要理解和明白我们这次实训的目的和意图:学习和掌握C+面向对象的程序设计思想和方法。 因此,凡是没有采用C+面向对象的程序设计思想和方法来实现的都是不合格的。为什么我们会选择如此简单的计算问题?主要是希望大家把精力集中在实现方法上,而不是将注意力放在对问题本身的理解上。2. 系统分析与设计通过分析,可以设计出完整的系统的总体框架和流程图。譬如,某银行综合业务系统的总体框架和流程图,如下图1。fnShowInfo( )是业务处理用户管理开始显示版本信息系统用户 ?用户登录显示欢迎信息终止图1否fnLogin( )fnWelcome( )fnUsrAdm( )fnDoWork( )为了方便设计和调试,可以先单独实现各功能模块。我们的系统没有“用户管理”等功能要求,因此,系统的总体框架可简化为图2。图2业务处理终止开始显示版本信息fnShowInfo( )fnDoWork( )2.1 分析与设计功能模块的总体框架和流程图单独实现“业务处理”的系统的总体框架和流程图如图3。图3 函数fnDoWork( )的工作流程其中,创建各对象的函数返回指向对象的指针,并存入基类指针变量pShape中,该变量作为函数virtualViaPointer的实参,由virtualViaPointer函数实现统一的计算并输出。当然,该图只是程序的一个框架结构,具体的程序还有很多细节需要补充,如释放动态创建的对象,输出计算结果后实现停顿以让用户看清结果等。请同学们自己画出函数fnCircle( ),fnCylinder( ),fnSphere ( ),fnRectangle( ),fnCuboid( )的流程图。2.2 分析与设计数据结构通过对任务的分析,发现有5个对象:圆、圆柱、圆球、长方形和长方体。它们都可用相应的类来实现。圆和长方形的输出都是周长和面积,圆柱、圆球、长方体的输出都是表面积和体积,即要计算输出的项是周长、面积和体积,对应于3个函数:circum(),area(),volume()。再加输出对象名称和对象属性的函数print(),可以构成一个包含公共接口的抽象类。总共6个类。由于所有计算与对象的位置无关,因此,圆和圆球的属性只有半径,圆柱的属性只有半径和高,长方形的属性只有长和宽,长方体的属性只有长、宽和高。若公共接口的抽象类为Shape,则圆类Circle继承Shape,圆柱类Cylinder继承Circle,圆锥类Cone继承Cylinder;长方形类Rectangle继承Shape, 长方体类Cuboid继承Rectangle。它们的层次结构图如下。ConeShapeCircleRectangleCuboidCylinderSphere类族的设计步骤: 设计基类Shape 通过继承Shape,设计圆类Circle和长方形类Rectangle 通过继承Circle,设计圆柱类Cylinder和圆球类Sphere 通过继承Rectangle,设计长方体类Cuboid 通过继承Cylinder,设计圆锥类ConeC+程序设计的思想精髓就是这样顺其自然地重用已有的代码,在现有的基础上再加扩展,从而使程序设计和维护的代价大大减小,极大地提高了软件的生产率。每个类的属性和方法(成员函数)如下:Shape+circum( ) const : virtual double+volume( ) const : virtual double+area( ) const : virtual double+print( ) const = 0 : virtual void抽象基类基类Shape泛指所有图形类,根本不知它是圆的还是方的,也不知它的大小,所以没有或没法确定它的数据成员。设计该类的目的是为整个类族提供一组公共的接口函数,并可利用虚函数这一多态机制实现统一的操作界面。Circle-radius : double+Circle( in double = 0.0 ) +setRadius( in double ) : void+getRadius( ) const : double+circum( ) const : double+area( ) const : virtual double+print() const : virtual void圆类圆类Circle对象的大小是由半径确定的,半径是圆类固有的属性,圆类的成员函数的计算处理都与它有关,所以必须将它作为数据成员,与成员函数封装在一起,构成圆类。没有真正理解c+程序设计思想精髓的人会把它切割下来,放到基类Shape中作为数据成员。这种认识错误体现在程序设计中就会影响类的扩展性和维护性。即使程序最终也能实现需要的功能,但在程序设计思想上那也是犯了根本性的错误,说明对类的继承与派生这一核心问题还没有真正理解。圆柱类Cylinder-radius : double-height : double+Cylinder( in double = 0.0, in double = 0.0 ) +setRadius( in double ) : void+getRadius( ) const : double+setHeight( in double ) : void+getHeight( ) const : double+circum( ) const : double+area( ) const : virtual double+volume( ) const : virtual double+print( ) const : virtual void圆柱类通过继承圆类可简化为:Cylinder-height : double+Cylinder( in double = 0.0, in double = 0.0 ) +setHeight( in double ) : void+getHeight( ) const : double+area( ) const : virtual double+volume( ) const : virtual double+print( ) const : virtual void(没有要求设计圆锥类,故可省略)圆锥类Cone-radius : double-height : double+Cone( in double = 0.0, in double = 0.0 )+setRadius( in double ) : void+getRadius( ) const : double+setHeight( in double ) : void+getHeight( ) const : double+circum( ) const : double+area( ) const : virtual double+volume( ) const : virtual double+print( ) const : virtual void圆锥类通过继承圆柱类可简化为:Cone+Cone( in double = 0.0, in double = 0.0 )+area( ) const : virtual double+volume( ) const : virtual double+print( ) const : virtual void圆球类Sphere-radius : double+Sphere( in double = 0.0 ) +setRadius( in double ) : void+getRadius( ) const : double+area( ) const : virtual double+volume( ) const : virtual double+print() const : virtual void圆球类通过继承圆类可简化为:Sphere+Sphere( in double = 0.0 ) +area( ) const : virtual double+volume( ) const : virtual double+print() const : virtual void长方形类Rectangle-length : double-width : double+Rectangle( in double = 0.0, in double = 0.0 ) +setLength( in double ) : void+getLength( ) const : double+setWidth( in double ) : void+getWidth( ) const : double+circum( ) const : double+area( ) const : virtual double+print( ) const : virtual void注意:类名中的字母l别打成数字1。全部打成数字1不会出错,但若有的地方是字母l,有的地方是数字1,则编译、连接时肯定会出错。长方体类Cuboid-length : double-width : double-height : double+Cuboid( in double = 0.0, in double = 0.0, in double = 0.0 ) +setLength( in double ) : void+getLength( ) const : double+setWidth( in double ) : void+getWidth( ) const : double+setHeight( in double ) : void+getHeight( ) const : double+circum( ) const : double+area( ) const : virtual double+volume( ) const : virtual double+print( ) const : virtual void长方体类通过继承长方形类可简化为:Cuboid-height : double+Cuboid( in double = 0.0, in double = 0.0, in double = 0.0 ) +setHeight( in double ) : void+getHeight( ) const : double+area( ) const : virtual double+volume( ) const : virtual double+print( ) const : virtual void符号含义符号含义-private+publicin参数为输入out参数为输出inout参数为输入/输出Shape斜体类名表示抽象基类,至少有一个纯虚函数:“=0”3. 编程与测试可以从基类开始单独编程和测试,但抽象基类不能单独编译和测试。或者先将系统分解成相对独立的功能模块,再将每个功能模块编写为一个函数。每个函数可以单独编译。若编译通过则说明已无语法错误。所有类和函数都测试通过后,就可以编写和联调整个程序了。基类应该是包含子孙类共有的属性和行为,子类应在基类的基础上扩充发展,孙类应在子类的基础上扩充发展,以此类推。体现软件从最简单最基本的开始、逐步积累发展的过程。从而使软件设计的工作量最小。如果基类把子孙类该做的事都包办了,那子孙类就没存在的必要了。基类的属性变量如果希望公有继承的子类能直接访问的话,可以声明为protected而不是private,譬如把圆类的半径声明为protected:protected: double radius;这样在公有继承了圆类的子类(圆球和圆柱)中就可直接访问圆类的半径
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度中级软考预测复习附完整答案详解【夺冠】
- 2024-2025学年度公务员(省考)试题预测试卷附答案详解(培优)
- 2024-2025学年度公务员(省考)模拟试题附完整答案详解【考点梳理】
- 2024-2025学年医师定期考核试题及参考答案详解(综合题)
- 2024-2025学年中医执业医师过关检测试卷带答案详解(考试直接用)
- 2024-2025学年度电梯考试考前冲刺练习重点附答案详解
- 2024-2025学年度化验员模拟试题【重点】附答案详解
- 2024-2025学年刑法期末考试通关考试题库及答案详解【新】
- 2024-2025学年度注册公用设备工程师练习题附参考答案详解【突破训练】
- 2024-2025学年度电梯考试模拟题库含答案详解【满分必刷】
- 旅行社运营实务电子课件 1.2 了解旅行社核心业务部门
- LY/T 1300-2005工业单宁酸
- JJF 1458-2014磁轭式磁粉探伤机校准规范
- 99S203 消防水泵接合器安装图集
- JJF 1321-2011 元素分析仪校准规范-(高清现行)
- 中小学生防溺水安全教育PPT课件【爱生命防溺水】
- 常州注射器项目可行性研究报告范文参考
- 第二章吸附分离功能高分子
- 八宅八星详解及化煞方法
- 脐带脱垂PPT课件
- 房租租赁合同
评论
0/150
提交评论