C++编写程序计算柱体的表面积和体积。

题目:编写程序计算柱体的表面积和体积。

   柱体的底面有圆形(Circle)和长方形(Rectangle)两种,设计一个公共基类Shape作为圆形和长方形的抽象基类,在其中定义求面积和周长的纯虚函数。柱体的底面既可以是圆形(Circle)也可以是长方形(Rectangle)。要求合理设计各个类的继承结构,写出能运行的完整程序,利用多态技术使程序结构简洁和易于扩展,并编写volume和surfacearea函数,分别计算柱体的体积和表面积,在main函数中分别定义一个圆形和长方形的对象,并输出由它们构成的圆柱体和长方体的表面积和体积。最后需指出程序中哪里体现了多态的应用。提示:柱体的体积等于底面积*高,柱体的侧面积等于底面周长*高。

       class Shape  //抽象类

       {

             virtual double area() = 0; //求面积

             virtual double perimeter() = 0;  //求周长

       };

      double volume(Shape *p,double height)//求柱体的体积,参数p是指向底面的指针,height是柱体的高度,返回值为体积

      double surfacearea(Shape *p,double height)//求柱体的表面积,height是柱体的高度,表面积等于两个底面积与侧面积的和,返回值为表面积

 

实现代码:

#include<iostream>
using namespace std;
class Shape
{
public:
	virtual double area()=0;
	virtual double perimeter()=0;
};
class Circle:public Shape
{
private:
    double r;
public:
	Circle(double r_)
	{
		r=r_;
	}
	virtual double area()
	{
		return (r*r*3.14);
	}
	virtual double perimeter()
	{
		return(2*3.14*r);
	}
};
class Rectangle:public Shape
{
private:
    double h,l;
public:
	Rectangle(double h_,double l_)
	{
		h=h_;
		l=l_;
	}
	virtual double area()
	{
		return (h*l);
	}
	virtual double perimeter()
	{
		return(h*2+l*2);
	}
};
class Cylinder:public Circle
{
public:
	Cylinder(double r_):Circle(r_){}
	double volume(Shape *p,double height)
	{
		return(p->area()*height);
	}
    double surfacearea(Shape *p,double height)
	{
		return(p->perimeter()*height+p->area()*2);
	}

};
class Prism:public Rectangle
{
public:
	Prism(double h_,double r_):Rectangle(h_,r_){};
	double volume(Shape *p,double height)
	{
		return(p->area()*height);
	}
    double surfacearea(Shape *p,double height)
	{
		return(p->perimeter()*height+p->area()*2);
	}

};
void main()
{
	Shape* p1;
	Cylinder x1(5);
    Prism y1(3,4);
	p1=&x1;
	cout<<"圆柱的体积:"<<x1.volume(p1,6.6)<<endl;
    cout<<"圆柱的面积:"<<x1.surfacearea(p1,6.6)<<endl;
	p1=&y1;
	cout<<"棱柱的体积:"<<y1.volume(p1,6.6)<<endl;
    cout<<"棱柱的面积:"<<y1.surfacearea(p1,6.6)<<endl;

}

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值