您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > c++派生类与继承实验报告
实验2派生类与继承实验课程名:面向对象程序设计(C++)专业班级:学号:姓名:实验时间:实验地点:指导教师:2.1实验目的和要求(1)掌握派生类的声明方法和派生类构造函数的定义方法。(2)掌握不同继承方式下,基类成员在派生类中的访问属性。(3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4)学习虚基类在解决二义性问题中的作用。二、实验内容一、构造一个类Geometry及其派生类,该类主要实现关于几何图形的基本操作。对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。实验代码如下:#includeiostreamusingnamespacestd;classGeometry{public:Geometry(){}CircleradiumsCircle()~Circle()BallBall()~Ball()GeometryGeometry()~Geometry()GetArea()GetPerimeter()Getcolume()show()ColumnColumn()~Column()RectangleRectangle()~Rectangle()~Geometry(){}doubleGetArea(){}//求面积函数doubleGetPerimeter(){}//求体积函数doubleGetcolume(){}//求周长函数virtualshow(){}};classCircle:publicGeometry{public:Circle(doublei){radiums=i;}~Circle(){}doubleGetArea();doubleGetcolume();doubleR(){returnradiums;}show();private:doubleradiums;};doubleCircle::GetArea(){doubleS;S=3.14*radiums*radiums;returnS;}doubleCircle::Getcolume(){doubleL;L=2*3.14*radiums;returnL;}Circle::show(){cout圆的面积为:GetArea()''周长为:Getcolume()endl;}classRectangle:publicGeometry{public:Rectangle(doublei,doublej){length=i;wide=j;}~Rectangle(){}doubleGetArea();doubleGetcolume();doubleL(){returnlength;}show();private:doublelength;doublewide;};doubleRectangle::GetArea(){doubleS;S=length*wide;returnS;}doubleRectangle::Getcolume(){doubleL;L=2*(length+wide);returnL;}Rectangle::show(){cout矩形的面积为:GetArea()''周长为:Getcolume()endl;}classBall:publicCircle{public:Ball(doublei):Circle(i){};~Ball(){};doubleGetArea();doubleGetPerimeter();show();};doubleBall::GetArea(){doubleS;S=4*3.14*R()*R();returnS;};doubleBall::GetPerimeter(){doubleV;V=(4/3)*3.14*R()*R()*R();returnV;}Ball::show(){cout球的体积为:GetPerimeter()''表面积为:GetArea()endl;}classColumn:publicCircle,publicRectangle{public:Column(doublei,doublej,doublek):Circle(i),Rectangle(j,k){};~Column(){};doubleGetArea();doubleGetPerimeter();show();};doubleColumn::GetArea(){return(2*3.14*R()*R()+2*3.14*R()*L());}doubleColumn::GetPerimeter(){return(3.14*R()*R()*L());}Column::show(){cout圆柱的体积为:GetPerimeter()''表面积为:GetArea()endl;}intmain(){Circlecircle(2.5);circle.show();Rectanglerectangle(3,4);rectangle.show();Ballball(3.3);ball.show();Columncolumn(1,2,3);column.show();return0;}运行结果:代码分析:1)首先定义基类Geometry,在定义基类的派生类Circle,Rectangle再定义以Circle,Rectangle为基类的派生类Column,以及以Circle为基类的派生类Ball;2)在定义派生类时用构造函数初始化私有成员;3)最后用类的对象来调用类函数;二、设计如下类:(1)建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。实验代码:#includeiostream#includemath.husingnamespacestd;classPoint//定义一个点的类,坐标为(x,y){public:Point(doublei,doublej){x=i;y=j;}doublex,y;};classLine{public:Line(doublex1,doubley1,doublex2,doubley2):p1(x1,y1),p2(x2,y2){};doublelength();private:Pointp1,p2;};doubleLine::length(){return(sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)));}classTriangle{public:Triangle(doublex1,doubley1,doublex2,doubley2,doublex3,doubley3,doublex4,doubley4,doublex5,doubley5,doublex6,doubley6):L1(x1,y1,x2,y2),L2(x3,y3,x4,y4),L3(x5,y5,x6,y6){};intpanduan();doubleArea();voidshow();private:LineL1,L2,L3;};intTriangle::panduan(){doublea=L1.length();doubleb=L2.length();doublec=L3.length();if(a+bc&&b+ca&&a+cb)return1;elsereturn0;}doubleTriangle::Area(){doublea=L1.length();doubleb=L2.length();doublec=L3.length();doubles=(a+b+c)/2;return(sqrt(s*(s-a)*(s-b)*(s-c)));}voidTriangle::show(){if(panduan())cout三角形的面积为:Area()endl;elsecout不能构成三角形endl;}intmain(){TriangleT1(0,0,0,1,0,0,1,0,0,1,1,0);TriangleT2(1,0,0,0,0,0,0,2,0,0,0,1);T1.show();T2.show();return0;}实验结果:实验分析:1)在主函数中定义两个三角形的类,分别由三条边六个点组成,其中第一组能组成三角形,输出面积,第二组边不能组成三角形输出不能构成三角形;2)定义点类时,定义两个浮点型数据,用来表示点的坐标,定义边类时定义两个顶点,表示两个端点组成线段,定义三角形类时,用三边表示三角形;3)三角形的面积用海伦公式求得,在三角形中定义一个判断函数,判断三边能否组成三角形,当能组成三角形时则求面积并输出,当不能组成三角形时,输出不能构成三角形;三、定义一个基类MyArray,基类中可以存放一组整数,基类中有构造函数、析构函数、输入数据和输出数据的函数。classMyArray{public:MyArray(intleng);~MyArray{};voidInput();voidDisplay(string);protected:int*alist;intlength;};(1)声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。(2)声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。(3)声明一个类AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。(4)声明一个NewArray类,同时继承了类SortArray,ReArray和AverArray,使得类NewArray的对象同时具有排序、倒置和求平均值的功能。在继承的过程中声明MyArray为虚基类,体会虚基类在解决二义性问题中的作用。实验代码:#includeiostream#includestringusingnamespacestd;classMyarray{protected:int*alist;intlength;public:Myarray(intlen){alist=newint[len];length=len;}~Myarray(){};voidinput(){inti;for(i=0;ilength;i++){cout输入数组的第i+1个元素:'\n';cinalist[i];}}intgetlen(){returnlength;}voiddisplay(){for(inti=0;ilength;i++)coutalist[i]'';coutendl;}};classSortArray:virtualpublicMyarray{public:SortArray(intn):Myarray(n){}sort(){inti,j,t;for(j=0;jlength-1;j++){for(i=0;ilength-j-1;i++){if(alist[i]alist[i+1]){t=alist[i];alist[i]=alist[i+1];alist[i+1]=t;}}}cout排序后数组为:;for(i=0;ilength;i++){coutalist[i]'';}}};classaverarray:virtualpublicMyarray{public:averarray(intn):Myarray
本文标题:c++派生类与继承实验报告
链接地址:https://www.777doc.com/doc-2453208 .html