定义抽象基类shape类,point类,circle类,cylinder类,都是shape类的直接派生类,间接派生类

用运算符重载进行派生类对象输出,求面积,体积,实现动态关联

第1个回答  2011-10-08
#include<iostream>

#include<cmath>

#include<iomanip>

#ifndef CSHAPE_H

#define CSHAPE_h

usingnamespace std;

constfloat PI=3.1;

class CShape//CShape抽象类定义

{

public:

virtualfloat length()//图形长度

{

return 0.0;

}

virtualfloat area()//图形面积

{

return 0.0;

}

virtualfloat valum()//图形体积

{

return 0.0;

}

virtualfloat zc()//图形周长

{

return 0.0;

}

virtualvoid draw()=0;//描绘图形

};

class CPoint:virtualpublic CShape//CPoint类定义

{

protected:

float x,y;

public:

CPoint(float a,float b)

{

x=a;

y=b;

}

void setpoint(float a,float b)

{

x=a;

y=b;

}

void draw()

{

cout<<"点的坐标为:"<<"("<<x<<","<<y<<")"<<endl;

}

};

class CLine:virtualpublic CShape//线类定义

{

protected:

float x,y,z,k;

public:

CLine(float a,float b,float c,float d)

{

x=a;

y=b;

z=c;

k=d;

}

void setline(float a,float b,float c,float d)

{

x=a;

y=b;

z=c;

k=d;

}

float length()

{

return(sqrt((x-z)*(z-z)+(y-k)*(y-k)));

}

void draw()

{

cout<<"两坐标分别为:"<<"("<<x<<","<<y<<")"<<",("<<z<<","<<k<<")"<<endl;

}

};

class CRectangle:virtualpublic CShape//长方形类定义

{

protected:

float length,width;

public:

CRectangle(float l,float w)

{

length=l;

width=w;

}

void setrectangle(float l,float w)

{

length=l;

width=w;

}

float area()

{

return(length*width);

}

float zc()

{

return(2*(length+width));

}

void draw()

{

cout<<"长方形的长为:"<<length<<setw(10)<<"宽为:"<<width<<endl;

}

};

class CCircle:virtualpublic CShape//圆类定义

{

protected:

float radius;

public:

CCircle(float r)

{

radius=r;

}

void setcircle(float r)

{

radius=r;

}

float area()

{

return(PI*radius*radius);

}

float zc()

{

return(2*PI*radius);

}

void draw()

{

cout<<"圆的半径为:"<<radius<<endl;

}

};

class CCylinder:virtualpublic CShape//圆柱类定义

{

protected:

float heigth,radius;

public:

CCylinder(float r,float h)

{

heigth=h;

radius=r;

}

void setcylinder(float r,float h)

{

heigth=h;

radius=r;

}

float area()

{

return(PI*radius*radius+2*PI*radius);

}

float valum()

{

return(PI*radius*radius*heigth);

}

void draw()

{

cout<<"圆柱高度为:"<<heigth<<setw(10)<<"半径为:"<<radius<<endl;

}

};

class CCone:virtualpublic CShape//定义一个圆锥类

{

protected:

float mx,radius;

public:

CCone(float a,float b)

{

mx=a;

radius=b;

}

void setcone(float a,float b)

{

mx=a;

radius=b;

}

float valum()

{

return(PI*radius*radius*sqrt(mx*mx-radius*radius));

}

void draw()

{

cout<<"母线长为:"<<mx<<setw(10)<<"半径长为:"<<radius<<endl;

}

};

class CTriangle:virtualpublic CShape//三角形类定义

{

protected:

float x,y,z;

public:

CTriangle(float a,float b,float c)

{

x=a;y=b;z=c;

}

void settriangle(float a,float b,float c)

{

x=a;y=b;z=c;

}

float zc()

{

return(x+y+z);

}

float area()

{

float t=(x+y+z)/2;

return(sqrt((t-x)*(t-y)*(t-z)));

}

void draw()

{

cout<<"三角形三边长分别为:"<<x<<","<<y<<","<<z<<endl;

}

};

class CPolygon:virtualpublic CShape//多边形类定义

{

protected:

float x;

int y;

public:

CPolygon(float a,int b)

{

x=a;

y=b;

}

void setpolygon(float a,int b)

{

x=a;

y=b;

}

float area()

{

return(sqrt(3.0)*x*x*y/4);

}

float zc()

{

return(x*y);

}

void draw()

{

cout<<"多边形的一边长为:"<<x<<setw(10)<<"边数为:"<<y<<endl;

}

};

#endif

#include"CShape.h"

#include<iostream>

#include<iomanip>

usingnamespace std;

void main()

{

char d='y';

int i(0);

cout<<"欢迎进入本系统!";

cout<<"请选择服务:"<<endl;

cout<<" 1.点的计算。"<<endl;

cout<<" 2.线的计算。"<<endl;

cout<<" 3.圆的计算。"<<endl;

cout<<" 4.圆柱的计算。"<<endl;

cout<<" 5.圆锥的计算。"<<endl;

cout<<" 6.长方形的计算。"<<endl;

cout<<" 7.多边形的计算。"<<endl;

cout<<" 8.三角形的计算。"<<endl;

cout<<" 9.退出。"<<endl;

while(d=='Y'||d=='y')

{

cout<<"请输入你的选择:"<<endl;

cin>>i;

if(i==1)

{

CShape *pshape;

CPoint point(2.0,3.0);

float a,b;

cout<<"请输入点的坐标:";

cin>>a>>b;

point.setpoint(a,b);

pshape=&point;

pshape->draw();

}

elseif(i==2)

{

CShape *pshape;

CLine line(1.0,2.0,3.0,4.0);

float a,b,c,d;

cout<<"请依次输入两端点的坐标:";

cin>>a>>b>>c>>d;

line.setline(a,b,c,d);

pshape=&line;

pshape->draw();

cout<<"线的长度为:"<<pshape->length()<<endl;

}

elseif(i==3)

{

CShape *pshape;

CCircle circle(2.0);

float a;

cout<<"请输入圆的半径:";

cin>>a;

circle.setcircle(a);

pshape=&circle;

pshape->draw();

cout<<"圆的面积为;"<<pshape->area()<<setw(10)<<"圆的周长为;"<<pshape->zc()<<endl;

}

elseif(i==4)

{

CShape *pshape;

CCylinder yz(2.0,3.0);

float a,b;

cout<<"请输入圆柱的底面半径和高:";

cin>>a>>b;

yz.setcylinder(a,b);

pshape=&yz;

pshape->draw();

cout<<"圆柱的面积为:"<<pshape->area()<<setw(10)<<"圆柱的体积为:"<<pshape->valum()<<endl;

}

elseif(i==5)

{

CShape *pshape;

CCone cone(5.0,4.0);

float a,b;

cout<<"请输入母线长和底面半径:";

cin>>a>>b;

cone.setcone(a,b);

pshape=&cone;

pshape->draw();

cout<<"圆锥的体积为:"<<pshape->valum()<<endl;

}

elseif(i==6)

{

CShape *pshape;

CRectangle rectangle(3.0,2.0);

float a,b;

cout<<"请输入长方形的长和宽:";

cin>>a>>b;

rectangle.setrectangle(a,b);

pshape=&rectangle;

pshape->draw();

cout<<"长方形的面积为:"<<pshape->area()<<setw(10)<<"长方形的周长为:"<<pshape->zc()<<endl;

}

elseif(i==7)

{

CShape *pshape;

CPolygon polygon(2.0,4);

float a;

int b;

cout<<"请输入多边形的边长和边数:";

cin>>a>>b;

polygon.setpolygon(a,b);

pshape=&polygon;

pshape->draw();

cout<<"多边形的面积为:"<<pshape->area()<<setw(10)<<"周长为:"<<pshape->zc()<<endl;

}

elseif(i==8)

{

CShape *pshape;

CTriangle triangle(3.0,4.0,5.0);

float a,b,c;

cout<<"请输入三角形三边长:";

cin>>a>>b>>c;

triangle.settriangle(a,b,c);

pshape=▵

pshape->draw();

cout<<"三角形的周长为:"<<pshape->zc()<<"面积为:"<<pshape->area()<<endl;

}

elseif(i==9)

{

return;

}

else

{

cout<<"输入错误,请重新输入!";

}

cout<<"是否继续其他操作(Y/N)?"<<endl;

cin>>d;

}

}

欢迎进入本系统!请选择服务:

1.点的计算。

2.线的计算。

3.圆的计算。

4.圆柱的计算。

5.圆锥的计算。

6.长方形的计算。

7.多边形的计算。

8.三角形的计算。

9.退出。

请输入你的选择:

1

请输入点的坐标:2

点的坐标为:(1,2)

是否继续其他操作(Y/N)?

y

请输入你的选择:

2

请依次输入两端点的坐标:1 2 3 4

两坐标分别为:(1,2),(3,4)

线的长度为:2

是否继续其他操作(Y/N)?

y

请输入你的选择:

3

请输入圆的半径:

圆的半径为:1

圆的面积为;3.1圆的周长为;6.2

是否继续其他操作(Y/N)?

y

请输入你的选择:

4

请输入圆柱的底面半径和高:1

圆柱高度为:1半径为:1

圆柱的面积为:9.3圆柱的体积为:3.1

是否继续其他操作(Y/N)?

y

请输入你的选择:

5

请输入母线长和底面半径:3

母线长为:5半径长为:3

圆锥的体积为1:111.6

是否继续其他操作(Y/N)?

y

请输入你的选择:

6

请输入长方形的长和宽:1 4

长方形的长为:1 宽为:4

长方形的面积为:4长方形的周长为:10

是否继续其他操作(Y/N)?

y

请输入你的选择:

7

请输入多边形的边长和边数:1 7

多边形的一边长为:1 边数为:

多边形的面积为:3.03109 周长为:7

是否继续其他操作(Y/N)?

y

请输入你的选择:

8

请输入三角形三边长:3 4 5

三角形三边长分别为:3,4,5

三角形的周长为:12面积为:2.44949

是否继续其他操作(Y/N)?

y

请输入你的选择:

9

请按任意键继续. . .
第2个回答  2011-10-08
这还不简单 这只是逻辑 关系追问

我不会啊 您给写一个呗

追答

一个是继承 一个是在 相应的类 里面实例化 就这么简单

本回答被提问者采纳
相似回答