

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用文档标准文案实验 2 派生类与继承实验课程名:面向对象程序设计(C+)专业班级: _ 学号: _ 姓名: _实验时间:_ 实验地点:_ 指导教师:2.1 实验目的和要求(1)掌握派生类的声明方法和派生类构造函数的定义方法。(2)掌握不同继承方式下,基类成员在派生类中的访问属性。(3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4)学习虚基类在解决二义性问题中的作用。实用文档标准文案二、实验内容一、构造一个类Geometry及其派生类,该类主要实现关于几何图形的基本操作。对于基 类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面
2、积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操 作。试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现 其相应操作。实验代码如下:#in clude using n amespace std; class Geometry实用文档标准文案public:Geometry()Geometry()double GetArea()求面积函数double GetPerimeter()求体积函数double Getcolume()求周长函数virtual show();class Circle:public Geometrypublic:Circle(double i)rad
3、iums=i;Circle()double GetArea();double Getcolume();实用文档标准文案double R()return radiums;show();private:double radiums;;double Circle:GetArea()double S;S=3.14*radiums*radiums;return S;double Circle:Getcolume()double L;L=2*3.14*radiums;实用文档标准文案return L;Circle:show()coutvv圆的面积为:vvGetArea()v 周长为:vGetcolume(
4、)ve ndl;class Recta ngle:public Geometrypublic:Recta ngle(double i,double j)le ngth=i;wide=j;Recta ngle()double GetArea();double Getcolume();double L()return len gth;实用文档标准文案show();private:double len gth;double wide;double Recta ngle:GetArea()double S;S=le ngth*wide;return S;double Recta ngle:Getcol
5、ume()double L;L=2*(le ngth+wide);return L;Recta ngle:show()实用文档标准文案coutvv矩形的面积为:vvGetArea()vv vGetcolume()ve ndl;class Ball:public Circlepublic:Ball(double i):Circle(i);Ball();double GetArea();double GetPerimeter();show();;double Ball:GetArea()double S;S=4*3.14*R()*R();return S;周长为:实用文档标准文案;double B
6、all:GetPerimeter()double V;V=(4/3)*3.14*R()*R()*R();return V;Ball:show()coutvv球的体积为:GetPerimeter()vv 为:vvGetArea()vvendl;class Colu mn:public Circle,public Recta nglepublic:Column( doublei,doublek):Circle(i),Recta ngle(j,k);Colum n();表面积j,double实用文档标准文案double GetArea();double GetPerimeter();show();;
7、double Colu mn:GetArea()return(2*3.14*R()*R()+2*3.14*R()*L();double Colu mn:GetPerimeter()return(3.14*R()*R()*L();Colu mn:show()coutvv圆柱的体积为:GetPerimeter()vv 积为:vvGetArea()vvendl;int main()表面实用文档标准文案Circle circle(2.5);circle.show();Recta ngle recta ngle(3,4);recta ngle.show();Ball ball(3.3);ball.sho
8、w();Colu mn colu mn (1,2,3);colu mn .show();return 0;运行结果:G:C-I-F代码农 J 浩实验CVti ugsy2_l. exe凰的面和为:N-625周长为:衣 面积为;12周瑟:14球的体彳H为:112.842表直积为:136.778圆柱的体和为:6.28表面枳为:18-84Press any key to cont inue代码分析:实用文档标准文案1)首先定义基类Geometry,在定义基类的派生类 Circle , Rectangle再定义以 Circle , Rectangle 为基类的派生类 Column,以及以 Circle
9、为基 类的派生类 Ball ;2) 在定义派生类时用构造函数初始化私有成员;3) 最后用类的对象来调用类函数;二、设计如下类:(1) 建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计 算,面积显示。实验代码:#include#in cludeusing n amespace std;class Poin
10、t II定义一个点的类,坐标为(x,y )public:Poi nt(double i,double j)x=i;y=j;double x,y;class Line实用文档标准文案public:Lin e(doublex1,doubley1,doubley2):p1(x1,y1),p2(x2,y2);double len gth();private:Poi nt p1,p2;double Lin e:le ngth()return(sqrt(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);class Trian glepublic:Triangle
11、(double x1,double y1,double x2,double y2,doubley3,double x4,double y4,double x5,double y5,double x6,double y6):L1(x1,y1,x2,y2),L2(x3,y3,x4,y4),L3(x5,y5,x6,y6);int pan dua n();double Area();void show();private:Li ne L1,L2, L3;int Trian gle:pa ndua n()double a=L1 .len gth();double b=L2.le ngth();doubl
12、e c=L3.le ngth();if(a+bc&b+ca&a+cb)return 1;elsereturn 0;double Trian gle:Area()x2,doublex3,double实用文档标准文案double a=L1 .len gth();double b=L2.le ngth();double c=L3.le ngth();double s=(a+b+c)/2;return(sqrt(s*(s-a)*(s-b)*(s-c);void Trian gle:show()if(pa ndua n()cout三角形的面积为:vArea()vendl; elsecou
13、t不能构成三角形endl;int mai n()Tria ngle T1(0,0,0,1,0,0,1,0,0,1,1,0);Triangle T2(1,0,0,0,0,0,0,2,0,0,0,1);T1.show();T2.show();return 0;实验结果:Press an ke 1/ to cont inue实验分析:实用文档标准文案1) 在主函数中定义两个三角形的类,分别由三条边六个点组成,其中第一组能组成三角形,输出面积,第二组边不能组成三角形输出不能构成 三角形;2) 定义点类时,定义两个浮点型数据,用来表示点的坐标,定义边类时定义两个顶点,表示两个端点组成线段,定义三角形类时
14、,用三边表示 三角形;3) 三角形的面积用海伦公式求得,在三角形中定义一个判断函数,判断三边能否组成三角形,当能组成三角形时则求面积并输出,当不能组成 三角形时,输出不能构成三角形;三、定义一个基类MyArray,基类中可以存放一组整数,基类中有构造函数、析构函数、输入数据和输出数据的函数。class MyArraypublic:MyArray(i nt le ng);MyArray;void In put();void Display(stri ng);protected:in t*alist;int len gth;(1) 声明一个类SortArray继承类MyArray,在该类中定义一个
15、函数,具有将输入的整 数从小到大进行排序的功能。(2) 声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数 进行倒置的功能。(3) 声明一个类AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整 数平均值的功能。(4)声明一个NewArray类,同时继承了类SortArray,ReArray和AverArray,使得类NewArray的对象同时具有排序、倒置和求平均值的功能。在继承的过程中声明MyArray为虚基类,体会虚基类在解决二义性问题中的作用。实验代码:实用文档标准文案#in clude#in cludevstri ngusin
16、g n amespace std;class Myarrayprotected:int *alist;int len gth;public:Myarray(i nt len)alist=new in tle n;le ngth=le n;Myarray();void in put()实用文档标准文案int i;for(i=0;i alisti;int getle n( )return len gth;void display。for(i nt i=0;ile ngth;i+)coutalistivv;coutvve ndl;;class SortArray:virtual public Mya
17、rrayvvn;实用文档标准文案public:SortArray(i nt n):Myarray( n)sort()int i,j,t;for(j=0;jle ngth-1;j+)for(i=0;ialisti+1)t=alisti;alisti=alisti+1;alisti+1=t;实用文档标准文案coutvv排序后数组为:;for(i=0;ile ngth;i+)coutalistivv;;class averarray:virtual public Myarraypublic:averarray(i nt n ):Myarray( n)float getaver()float aver
18、;int sum=0,i;for(i=0;ile ngth;i+)sum+=alisti;aver=(float)sum/le ngth; retur n aver;实用文档标准文案;class rearray:virtual public Myarraypublic:rearray(i nt n ):Myarra y(n)void turn()int i,t,j=length-1;for(i=0;ile ngth/2;i+,j-)t=alisti;alisti=alistj;alistj=t;;class n awarray:public rearray,public averarray,p
19、ublic实用文档标准文案SortArraypublic:n awarray(i ntn ):Myarray (n ),rearray (n ),averarra y(n ),SortArra y(n);int main()n awarray A(10);A.i nput();A.display();A.sort();coutvv输出平均值:e ndl;coutvA.getaver()vve ndl;coutvv倒置:0 : 1 : 2 : 3其中,0、1、2、3为队列中的元素,0是队头。在栈类中实现一个输出栈中内容的函数prin tStack,输出格式为:Stack member:I 3 |
20、I 2 II 1 II 0 I其中,3、2、1、0是栈中元素,3为栈顶元素。(3) 用多文件结构实现程序。三个类的定义放在一个头文件中,类的实现放在另一个 源文件中。主程序用于测试你所设计的三个类的正确性。测试内容包括:?在队列中加入几个元素,用printQueue()打印队列内容,然后再从队列中取出这些 元素,看是否正确?在栈中加入几个元素,用printStack()打印栈的内容,然后再从栈中取出这些元素, 看是否正确?测试取队列长度的函数getQueueLength()的正确性?测试判断栈是否为空的函数empty()的正确性实验代码:#in cludeusing n amespace st
21、d;struct Nodeint getHead (void); /int peekHead(void)bool empty ( ); / intgetElemCo un t();/取列表个数实用文档标准文案int data;Node *n ext;class Lin kListpublic:Lin kList(i nt a,i nt n);构造函数Li nkList()head=newNode;tail=newNode;head- next=NULL;tail-n ext=NULL;Li nkList();析构函数int Len gth();求链表长度的函数int puthead();在头部插入兀素的函数int puttail();在尾部插入兀素的函数void emoty();检查链表是否为空的函数int gethead (); /从表头取出一个兀素Node *head,*tail;int len gth;实用文档标准文案;LinkList:LinkList(int a,int n) int i;Node *p,*q;head=new Node; head-data=a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 台州职高面试题及答案
- 车辆转让与维修保养培训及配件供应合同
- 智能停车诱导系统建设与车位租赁合同
- 长铁丝考试题及答案
- 矿石分区管理方案
- 手工环保面试题及答案
- 水利施工技术方案
- 围棋初步考试题及答案
- 2026版《全品高考》选考复习方案生物38 第26讲 免疫调节含答案
- 玻璃破碎安保措施方案
- 企业管理-某公司虚拟股份管理暂行办法
- 兼职中医师聘用合同范本
- 密闭空间环氧树脂防腐施工方案
- 渣土运输方案
- 2025-2030中国包装印刷行业现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 董事长给应届生培训
- 高职大学生心里健康教育(第2版)-课程思政案例(结合知识点)
- Drager呼吸机使用指南
- 办公用品、易耗品供货服务方案投标方案文件
- 民兵应急知识培训课件
- 酒吧装修施工方案
评论
0/150
提交评论