当前位置:文档之家› c++派生类与继承实验报告

c++派生类与继承实验报告

实验2 派生类与继承实验课程名:面向对象程序设计(C++)专业班级:学号:姓名:实验时间:实验地点:指导教师:2.1实验目的和要求(1) 掌握派生类的声明方法和派生类构造函数的定义方法。

(2) 掌握不同继承方式下,基类成员在派生类中的访问属性。

(3) 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。

(4) 学习虚基类在解决二义性问题中的作用。

二、实验内容一、构造一个类Geometry 及其派生类,该类主要实现关于几何图形的基本操作。

对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。

试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。

实验代码如下:#include<iostream>using namespace std;class Geometry{public:Geometry(){}CircleradiumsCircle()~Circle() BallBall()~Ball() GeometryGeometry()~Geometry()GetArea()GetPerimeter()Getcolume()show()Column Column()~Column()Rectangle Rectangle() ~Rectangle()~Geometry(){}double GetArea(){}//求面积函数double GetPerimeter(){}//求体积函数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;}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;double 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();};double 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(){};double 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();Ball 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类的对象;建立Triangle类,表示一个三角形,内含三个Line 类的对象构成一个三角形。

(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。

实验代码:#include<iostream>#include<math.h>using namespace std;class Point //定义一个点的类,坐标为(x,y){public:Point(double i,double j){x=i;y=j;}double x,y;};class Line{public:Line(double x1,double y1,double x2,double y2):p1(x1,y1),p2(x2,y2){};double length();private:Point p1,p2;};double Line::length(){return(sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y))); }class Triangle{public:Triangle(double x1,double y1,double x2,double y2,double x3,double y3,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 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+b>c&&b+c>a&&a+c>b)return 1;elsereturn 0;}double Triangle::Area(){double a=L1.length();double b=L2.length();double c=L3.length();double s=(a+b+c)/2;return(sqrt(s*(s-a)*(s-b)*(s-c)));}void Triangle::show(){if(panduan())cout<<"三角形的面积为:"<<Area()<<endl;elsecout<<"不能构成三角形"<<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)在主函数中定义两个三角形的类,分别由三条边六个点组成,其中第一组能组成三角形,输出面积,第二组边不能组成三角形输出不能构成三角形;2)定义点类时,定义两个浮点型数据,用来表示点的坐标,定义边类时定义两个顶点,表示两个端点组成线段,定义三角形类时,用三边表示三角形;3)三角形的面积用海伦公式求得,在三角形中定义一个判断函数,判断三边能否组成三角形,当能组成三角形时则求面积并输出,当不能组成三角形时,输出不能构成三角形;三、定义一个基类MyArray,基类中可以存放一组整数,基类中有构造函数、析构函数、输入数据和输出数据的函数。

相关主题