c派生类及继承实验报告16036.pdf

上传人:得****3 文档编号:83504021 上传时间:2023-03-31 格式:PDF 页数:28 大小:839.22KB
返回 下载 相关 举报
c派生类及继承实验报告16036.pdf_第1页
第1页 / 共28页
c派生类及继承实验报告16036.pdf_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《c派生类及继承实验报告16036.pdf》由会员分享,可在线阅读,更多相关《c派生类及继承实验报告16036.pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-实验 2 派生类与继承 实验课程名:面向对象程序设计C+专业班级:*:实验时间:实验地点:指导教师:2.1 实验目的和要求(1)掌握派生类的声明方法和派生类构造函数的定义方法。(2)掌握不同继承方式下,基类成员在派生类中的访问属性。(3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4)学习虚基类在解决二义性问题中的作用。二、实验容 一、构造一个类Geometry及其派生类,该类主要实现关于几何图形的根本操作。对于基类几何图形,有求面积、求体积的函数纯虚函数,其派生类圆和矩形主要有初始化构造函数,求面积,求周长操作,类圆的派生类圆球和圆柱有求外表积、体积操作。试在主函数中分别定

2、义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。-实验代码如下:#include using namespace std;class Geometry public:Geometry()Geometry()double GetArea()/求面积函数 double GetPerimeter()/求体积函数 Circle radiums Circle()Circle()Ball Ball()Ball()Geometry Geometry()Geometry()GetArea()GetPerimeter()Getcolume()show()Column Column()Column

3、()Rectangle Rectangle()Rectangle()-double Getcolume()/求周长函数 virtual show();class Circle:public Geometry public:Circle(double i)radiums=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

4、;double Circle:Getcolume()double L;L=2*3.14*radiums;return L;Circle:show()cout圆的面积为:GetArea()周长为:Getcolume()endl;class Rectangle:public Geometry public:Rectangle(double i,double j)length=i;wide=j;Rectangle()double GetArea();-double Getcolume();double L()return length;show();private:double length;dou

5、ble wide;double Rectangle:GetArea()double S;S=length*wide;return S;double Rectangle:Getcolume()double L;L=2*(length+wide);return L;-Rectangle:show()cout矩形的面积为:GetArea()周长为:Getcolume()endl;class Ball:public Circle public:Ball(double i):Circle(i);Ball();double GetArea();double GetPerimeter();show();do

6、uble Ball:GetArea()double S;S=4*3.14*R()*R();return S;double Ball:GetPerimeter()-double V;V=(4/3)*3.14*R()*R()*R();return V;Ball:show()cout球的体积为:GetPerimeter()外表积为:GetArea()endl;class Column:public Circle,public Rectangle public:Column(double i,double j,double k):Circle(i),Rectangle(j,k);Column();do

7、uble GetArea();double GetPerimeter();show();double Column:GetArea()return(2*3.14*R()*R()+2*3.14*R()*L();-double Column:GetPerimeter()return(3.14*R()*R()*L();Column:show()cout圆柱的体积为:GetPerimeter()外表积为:GetArea()endl;int main()Circle circle(2.5);circle.show();Rectangle rectangle(3,4);rectangle.show();B

8、all ball(3.3);ball.show();Column column(1,2,3);column.show();return 0;-运行结果:代码分析:1首先定义基类Geometry,在定义基类的派生类 Circle,Rectangle 再定义以 Circle,Rectangle 为基类的派生类 Column,以及以 Circle 为基类的派生类 Ball;2在定义派生类时用构造函数初始化私有成员;3最后用类的对象来调用类函数;二、设计如下类:1建立一个 Point 类,表示平面中的一个点;建立一个 Line 类,表示平面中的一条线端,含两个 Point 类的对象;建立 Triang

9、le 类,表示一个三角形,含三个 Line 类的对象构成一个三角形。2设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制 3设计 Triangle 类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。实验代码:#include#include using namespace std;class Point /定义一个点的类,坐标为*,y public:Point(double i,double j)*=i;y=j;double*,y;class Line public:Line(double*1,double y1,double*2,double y2):p1(

10、*1,y1),p2(*2,y2);double length();private:-Point p1,p2;double Line:length()return(sqrt(p1.*-p2.*)*(p1.*-p2.*)+(p1.y-p2.y)*(p1.y-p2.y);class Triangle public:Triangle(double*1,double y1,double*2,double y2,double*3,double y3,double*4,double y4,double*5,double y5,double*6,double y6):L1(*1,y1,*2,y2),L2(*3

11、,y3,*4,y4),L3(*5,y5,*6,y6);int panduan();double Area();void show();private:Line L1,L2,L3;int Triangle:panduan()double a=L1.length();double b=L2.length();double c=L3.length();if(a+bc&b+ca&a+cb)return 1;else return 0;double Triangle:Area()double a=L1.length();double b=L2.length();double c=L3.length();

12、double s=(a+b+c)/2;return(sqrt(s*(s-a)*(s-b)*(s-c);void Triangle:show()if(panduan()cout三角形的面积为:Area()endl;else cout不能构成三角形endl;int main()-Triangle 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;实验结果:实验分析:1)在主函数中定义两个三角形的类,分别由三条边六个点组成,其中第一组能组成三角形,输出面积,第二组

13、边不能组成三角形输出不能构成三角形;2)定义点类时,定义两个浮点型数据,用来表示点的坐标,定义边类时定义两个顶点,表示两个端点组成线段,定义三角形类时,用三边表示三角形;3)三角形的面积用海伦公式求得,在三角形中定义一个判断函数,判断三边能否组成三角形,当能组成三角形时则求面积并输出,当不能组成三角形时,输出不能构成三角形;三、定义一个基类 MyArray,基类中可以存放一组整数,基类中有构造函数、析构函数、输入数据和输出数据的函数。class MyArray public:MyArray(int leng);MyArray;void Input();void Display(string);

14、protected:int*alist;int length;-1声明一个类 SortArray 继承类 MyArray,在该类中定义一个函数,具有将输入的整数从小到大进展排序的功能。2声明一个类 ReArray 继承类 MyArray,在该类中定义一个函数,具有将输入的整数进展倒置的功能。3声明一个类 AverArray 继承类 MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。4 声明一个 NewArray 类,同时继承了类 SortArray,ReArray 和 AverArray,使得类NewArray 的对象同时具有排序、倒置和求平均值的功能。在继承的过程中声明 M

15、yArray为虚基类,体会虚基类在解决二义性问题中的作用。实验代码:#include#include using namespace std;class Myarray protected:int*alist;int length;public:Myarray(int len)alist=new intlen;length=len;Myarray();void input()int i;for(i=0;ilength;i+)-cout输入数组的第i+1个元素:alisti;int getlen()return length;void display()for(int i=0;ilength;i

16、+)coutalisti;coutendl;class SortArray:virtual public Myarray public:SortArray(int n):Myarray(n)sort()int i,j,t;for(j=0;jlength-1;j+)-for(i=0;ialisti+1)t=alisti;alisti=alisti+1;alisti+1=t;cout排序后数组为:;for(i=0;ilength;i+)coutalisti;class averarray:virtual public Myarray public:averarray(int n):Myarray(

17、n)float getaver()-float aver;int sum=0,i;for(i=0;ilength;i+)sum+=alisti;aver=(float)sum/length;return aver;class rearray:virtual public Myarray public:rearray(int n):Myarray(n)void turn()int i,t,j=length-1;for(i=0;ilength/2;i+,j-)t=alisti;alisti=alistj;alistj=t;-;class nawarray:public rearray,public

18、 averarray,public SortArray public:nawarray(int n):Myarray(n),rearray(n),averarray(n),SortArray(n);int main()nawarray A(10);A.input();A.display();A.sort();cout输出平均值:endl;coutA.getaver()endl;cout倒置:0:1:2:3 其中,0、1、2、3 为队列中的元素,0 是队头。在栈类中实现一个输出栈中容的函数 printStack,输出格式为:Stack member:|3|2|-|1|0|-其中,3、2、1、0

19、是栈中元素,3 为栈顶元素。3用多文件构造实现程序。三个类的定义放在一个头文件中,类的实现放在另一个源文件中。主程序用于测试你所设计的三个类的正确性。测试容包括:在队列中参加几个元素,用 printQueue()打印队列容,然后再从队列中取出这些元素,看是否正确 在栈中参加几个元素,用 printStack()打印栈的容,然后再从栈中取出这些元素,看是否正确 测试取队列长度的函数 getQueueLength()的正确性 测试判断栈是否为空的函数 empty()的正确性 实验代码:#include using namespace std;struct Node int data;Node*ne

20、*t;class LinkList public:LinkList(int a,int n);/构造函数 LinkList()head=new Node;tail=new Node;head-ne*t=NULL;tail-ne*t=NULL;LinkList();/析构函数 int Length();/求链表长度的函数-int puthead();/在头部插入元素的函数 int puttail();/在尾部插入元素的函数 void emoty();/检查链表是否为空的函数 int gethead();/从表头取出一个元素 Node*head,*tail;int length;LinkList:

21、LinkList(int a,int n)int i;Node*p,*q;head=new Node;head-data=a0;p=new Node;p-data=a1;head-ne*t=p;for(i=2;idata=ai;p-ne*t=q;p=q;-tail=p;tail-ne*t=NULL;LinkList:LinkList()Node*p,*q;p=head;while(p)q=p;p=p-ne*t;delete q;int LinkList:Length()Node*p;int i=0;p=head;while(p)-p=p-ne*t;i+;return i;int LinkLis

22、t:puthead()Node*p;p=new Node;cout请输入要插入的元素:p-data;p-ne*t=head;head=p;return 0;int LinkList:puttail()Node*p;p=new Node;cout请输入要插入的元素:p-data;tail-ne*t=p;-tail=p;tail-ne*t=NULL;return 0;void LinkList:emoty()if(!head-ne*t)cout链表为空endl;else cout链表不为空ne*t;return p-data;delete p;class Queue:public LinkList

23、-public:Queue(int a,int n):LinkList(a,n);void inqueue();/入队函数 void outqueue();/出队函数;void Queue:inqueue()LinkList:puttail();void Queue:outqueue()cout;while(head!=NULL)coutLinkList:gethead():;coutendl;class Stack:public LinkList public:-Stack():LinkList()int i=0;for(i=0;i10;i+)LinkList:puthead();void

24、instack();/入栈函数 void outstack();/出栈函数;void Stack:instack()LinkList:puthead();void Stack:outstack()cout;while(head-ne*t)coutLinkList:gethead():;-coutendl;int main()int a10=0,1,2,3,4,5,6,7,8,9;Queue queue(a,10);queue.inqueue();queue.outqueue();Stack stack;stack.outstack();return 0;运行结果:-程序分析:定义基类链表其中包

25、含功能 能够在链表的头尾增加节点以及在链表尾增加节点 能够记录链表的个数用静态成员 能返回链表中的节点个数 能查看链表头节点的元素值 能告知链表是否为空 在链表类的构造函数中初始化链表 在链表类的析构函数中释放链表所有元素的空间 定义派生类队与栈,队列初始化用链表的初始化函数,用 gettail 实现入队操作用gethead 实现从队列的头部出对。栈中初始化用函数 puthead 实现从栈顶入栈,用函数gethead()实现从栈顶出栈。三、结论 1继承可以从基类中获得派生类中不曾定义过的成员,提高了编程效率;2继承与派生分为共有、私有、保护三种继承方式,其中共有使用最广泛,-它使得派生类与基类中的成员具有一样的属性。3多重继承存在有二义性,用虚基类能有效解决这一问题。4除了继承还有组合关系,及在一个类中定义另一个类的对象,此时初始化时要用对象名来调用初始化函数。调用对应的函数时,要用对象名调用它的函数。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁