4.编写程序,定义抽象基类Shape(形状),由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)和Square (正方形),用函数函数ShowArea()分别显示各种图形的面积,最后还要显示所有图形的总面积。要求用基类指针数组,使它的每一个元素指向一一个派生类对象。
#include <iostream>
using namespace std;
const double pi=3.14;
class Shape
{
public:
Shape(){}
virtual ~Shape(){}
virtual double ShowArea() const
{
return 0;
}
virtual void shapeName() const =0;
};
class Circle: public Shape
{
public:
Circle(double r)
{
radius=r;
}
~Circle(){}
virtual double ShowArea() const
{
return pi*radius*radius;
}
virtual void shapeName() const
{
cout<<"圆形 ";
}
protected:
double radius;
};
class Rectangle: public Shape
{
public:
Rectangle(double a, double b)
{
x=a;
y=b;
}
~Rectangle(){}
virtual double ShowArea() const
{
return x*y;
}
virtual void shapeName() const
{
cout<<"矩形 ";
}
protected:
double x, y;
};
class Square: public Shape
{
public:
Square(double a)
{
x=a;
}
~Square(){}
virtual double ShowArea() const
{
return x*x;
}
virtual void shapeName() const
{
cout<<"正方形 ";
}
protected:
double x;
};
int main()
{
Circle circle(6);
Square square(4);
Rectangle rectangle(3, 4);
double SumArea=0;
Shape *pt[3]={&circle, &square, &rectangle};
Shape **p;
cout<<"形状:"<<" "<<"面积:"<<endl;
for (p=pt; p<pt+3; p++)
{
(*p)->shapeName();
cout<<(*p)->ShowArea()<<endl;
SumArea+=(*p)->ShowArea();
}
cout<<endl<<"总面积为:"<<SumArea<<endl;
return 0;
}