39. 定义一个抽象类 Shape 用以计算面积,从中派生出计算长方形、梯形、圆形 面积的派生类。程序中通过基类指针来调用派生类中的虚函数,计算不同形状的 面积。
#include<iostream>
#define pi 3.14
using namespace std;
class Shape
{
public:
virtual float getArea() const = 0;
};
class rectangle: public Shape
{
private:
float length;
float width;
public:
rectangle(float L,float W);
float getArea() const override;
};
rectangle::rectangle(float L,float W):length(L),width(W){}
float rectangle::getArea() const{
return length*width;
}
class Triangle: public Shape
{
private:
float Side;
float Height;
public:
Triangle(float S,float H);
float getArea() const override;
};
Triangle::Triangle(float S,float H){}
float Triangle::getArea() const{
return Side*Height/2;
}
class Circle: public Shape
{
private:
float radius;
public:
Circle(float R);
float getArea() const override;
};
Circle::Circle(float R):radius(R){}
float Circle::getArea() const{
return radius*radius*pi;
}
class Trapezoid: public Shape
{
private:
float upSide;
float downSide;
float height;
public:
Trapezoid(float U,float D,float H);
float getArea() const override;
};
Trapezoid::Trapezoid(float U,float D,float H):upSide(U),downSide(D),height(H){}
float Trapezoid::getArea() const{
return (upSide+downSide)*height/2;
};
int main(){
Shape* p[4];
p[0] = new rectangle(4,5);
p[1] = new Triangle(3,6);
p[2] = new Circle(5);
p[3] = new Trapezoid(3,7,6);
for (int i = 0; i < 4; i++)
{
cout<<p[i]->getArea()<<endl;
}
return 0;
}