C++面向对象程序设计的大作业计算两点之间的距离_第1页
C++面向对象程序设计的大作业计算两点之间的距离_第2页
C++面向对象程序设计的大作业计算两点之间的距离_第3页
C++面向对象程序设计的大作业计算两点之间的距离_第4页
C++面向对象程序设计的大作业计算两点之间的距离_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、武汉轻工大学 面向对象程底设计期末大作业 专业:电子信息科学与技术 班级:电信产业1301班 学号:1304100025 姓名:肖梦 1目的与要求 学生能够比较熟练地掌握 C+C+语言的基本语法规则;熟练掌握基本的面向对象的程序设计方法,如类的实现、创建类的实例一对象、实现类的继承等;掌握各种面向对象的程序设计技术,如继承和派生,虚继承、虚函数、抽象类、多态的实现等。掌握在 VC+VC+平台上进行程序设计和调试的方法。 学生利用学到的面向对象的基本原理和 C+C+语言语法以及编程技巧,通过灵 活应用 VisualC+6.VisualC+6.0 0 集成开发环境进行应用程序和系统的开发设计, 掌

2、握可视化程序设计的基本方法和步骤,强化巩固已有编程知识,训练新的设计与编程思路,帮助熟悉程序编写,及时查究错误。要求学生独立完成完整的用 C+C+语言编写的应用程序,以全面掌握 C+C+面向对象程序设计的基础知识。 2设计内容 2.1 计算两点之间的距离 用类实现计算两点之间的距离。(可以定义点类(PointPoint), ,再定义一个类 (DistanceDistance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。) 2.1.1 程序设计方案和原理 根据题目要求本题可以用类的组合来实现。我们可以用一个 pointpoint 类来描述平面上点的 的

3、坐标,然后为 DistanceDistance 类添加一个 PointPoint 类的对象作为其数据成员,用来计算两个点之间的距离。 2.1.2 程序的代码实现 #include #include classPoint定义Point类 (public: Point(inta=0,intb=0)(x=a;y=b; )intxcord() (returnx; )intycord() (returny; )private:intx,y; );classDistance/定义Distance类作为容器类 ( public:Distance(Pointq1,Pointq2);floatgetdist()

4、 (returndist; )private:Pointp1,p2;/p1,p2是类嵌对象 floatdist; ); Distance:Distance(Pointq1,Pointq2):p1(q1),p2(q2)通过初始化列表向 函数赋值*/ (floatx=float(p1.xcord()-p2.xcord();floaty=float(p1.ycord()-p2.ycord();dist=sqrt(x*x+y*y);两点间距离 )voidmain()( /创建Point类对象 /创建Distance类对象/Distance类的构造函数 类嵌对象的构造 Pointp(0,0),q(1,1

5、); Distancedis(p,q); coutThedistanceis:dis.getdist()()endl; ) Distance类为容器类, 包含Point类的内嵌对象q1和q2,Distance类的构造函数通过初始化列表向Point类的构造函数传递参数。 2.1.3 程序运行效果 口l!GUsersAdliTiini5tratorDe5lctcipVC+MVDelbug.l Thedistanceis:1.41421 Pressanykeytocontinue 程序对(0,0)、(1,1)两点间的距离进行计算,结果为1.41421. 2.2 类的应用 一圆型游泳池如图所示,现在需

6、在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为 3535 元/米,过道造价为 2020 元/平方米。过道宽度为 3 3 米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。 2.2.1 程序设计方案和原理 先定义PI、栅栏和过道造价等常量,创建一个Circle类,通过类的面积和周长的成员函 求出过道的面积和周长,最后乘以造价得到所需的造价。 CircCirc e e 类 PoolPool radiusradius CircumferenceCircumference PoolRimPoolRim 1 AreaArea FencePriceFencePrice ConcreteP

7、riceConcretePrice 2.2.2 程序的代码实现 #include usingnamespacestd; constfloatPI=3.14159; constfloatFencePrice=35; constfloatConcretePrice=20; 声明类Circle及其数据成员和成员函数classCircle private: floatradius; public: Circlefloatr);/声明带参构造函数 floatCircumference()const;圆周长floatArea()const;圆面积; /构造函数初始化数据成员radius Circle:Ci

8、rcle(floatr)radius=r; /计算圆的周长floatCircle:Circumference()const return2*PI*radius; /计算圆的面积floatCircle:Area()const returnPI*radius*radius; voidmain() floatradius; floatFenceCost,ConcreteCost;coutradius; /声明Circle对象 CirclePool(radius); CirclePoolRim(radius+3); /计算栅栏造价并输出 FenceCost=PoolRim.Circumference(

9、)*FencePrice; coutFencingCostis FenceCostendl; /计算过道造价并输出 ConcreteCost=(PoolRim.Area()-Pool.Area()*ConcretePrice; coutConcreteCostis ConcreteCostendl; 利用类中的Circumference。成员函数来计算周长, 用PoolRim.Area()-Pool.Area()来计算过道的面积, 再算出造价。 2.2.3 程序运行效果 |3C:Lser5AdministratohDeslctopC+2D曲ug2.exe I Entertheradiusoft

10、hepool:10 FencingCostis2858.85 boncreteCostis4335.39 Pressanykeytocontinue 输入池子的半径为10米,得出栅栏和过道造价分别为 2858.85和4335.39。 2.3虚基类应用 设计一个虚基类 Person,Person,包含姓名和年龄私有数据成员以及相关的成员函数; 出领导类 Leader,Leader,包含职务和部门私有数据成员以及相关的成员函数;再由 工程师类 Engineer,Engineer,包含职务和专业私有数据成员以及相关的成员函数;再由 EngineerEngineer 类派生出主任工程师类 Chairm

11、anChairmano o并采用相关数据进行测试。 由它派生 PersonPerson 派生出 LeaderLeader 和 程序设计方案和原理 程序的代码实现 #include #includeclassPersonprivate:charname20;intage; public: Person(char*n,inta);/卢明带参的构造函数 char*getname();intgetage(); ;classLeader:virtualpublicPerson/Person是虚基类 private: charjob20; chardep20; public:Leader(char*jb,

12、char*dp);char*getjob(); char*getdep(); classEngineer:virtualpublicPerson/Person是虚基类 private: charmajor20; charprof20; public: Engineer(char*maj,char*pf); char*getprof();char*getmajor(); ; classChairman:publicLeader,publicEngineer/Chairman是虚基类Person的间接派生类 public: Chairman(char*n,inta,char*job,char*dp

13、,char*maj,char*pf);voiddisp(); ; Person:Person(char*n,inta) strcpy(name,n);age=a; ) char*Person:getname() (returnname; )intPerson:getage()( returnage; ) Leader:Leader(char*jb,char*dp):Person(”,20) ( strcpy(job,jb);strcpy(dep,dp); ) char*Leader:getjob() (returnjob; )char*Leader:getdep()( returndep; )

14、 Engineer:Engineer(char*maj,char*pf):Person(,30) ( strcpy(major,maj);strcpy(prof,pf); ) char*Engineer:getmajor() (returnmajor; )char*Engineer:getprof()(returnprof; ) Chairman:Chairman(char*n,inta,char*jb,char*dp,char*maj,char*pf):Person(n,a),Leader(jb,dp),Engineer(maj,pf) () voidChairman:disp() ( co

15、ut姓 名:getname()t年 龄:getage()t职 务:getjob()t部门:getdep()t专业:getmajor()t职称:getprof()endl; voidmain() ( cout请分别输入:姓名:t“年龄:t职务:t“部门:t“专业:t职称:name; cinage; cinjob; cindep; cinmajor; cinprof; Chairmanc(name,age,job,dep,major,prof); c.disp(); 程序运行效果 UCUserMtlmri5tratDri)e5lttcpC+Debug.)(e-OX Mike (23 目经琏 网友部

16、 电气 金皴工程师 国名激/年龄侬职知项目好理部门;研发部专业:电气职称:高 区工程师 PreasiiiykeyLncnntiiiue 3总结 . .在计算两点间的距离时,直接开方和乘方时出错。 解决方法:加上 mathmath 头文件。 . .在对类的继承相关程序进行编程时,感觉类之间的关系非常混乱。 解决方法:先在构思出大致的框架,理清类与类之间的关系,再进行编程。 . .在对用户自己输入信息这部分进行编程时,如果全部用指针和数组来实现,程序会变得比较复杂。 解决方法:利用 stringstring 头文件里面的 strcpystrcpy 等函数来实现,使程序更加简洁。 通过本次大作业,使我对 C+C+编程有了更深的了解,它具有更好的模块化,更高级的抽 象性,更好的代码可重用性,巩固了我对 OOPOOP 勺掌握和对类等知识点的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论