C++——编写一个程序,定义抽象基类,由它派生出5个派生类:圆形、正方形、矩形、梯形、三角形。用虚函数分别计算几种图形面积,并求它们之和。要求用基类指针数组,使它每一个元素指向一个派生类对象。

没注释的源代码

#include <iostream>

using namespace std;

class Shape

{

public:

    virtual double area() const=0;

};

class Circle :public Shape

{

public:

    Circle(double r):radius(r){}

    virtual double area() const {return 3.14*radius*radius;}

protected:

    double radius;

};

class Square :public Shape

{

public:

    Square(double s):side(s){}

    virtual double area() const {return 3.14*side*side;}

protected:

    double side;

};

class Rectangle :public Shape

{

public:

    Rectangle(double w,double h):width(w),height(h){}

    virtual double area() const {return width*height;}

protected:

    double width,height;

};

class Trapezoid :public Shape

{

public:

    Trapezoid(double a,double b,double h):a(a),b(b),height(h){}

    virtual double area() const {return 0.5*(a+b)*height;}

protected:

    double a,b,height;

};

class Triangle :public Shape

{

public:

    Triangle(double a,double h):a(a),height(h){}

    virtual double area() const {return 0.5*a*height;}

protected:

    double a,height;

};

void printarea(const Shape &s)

{

    cout<<s.area()<<endl;

}

int main()

{

    Circle c(3.6);

    Square s(5);

    Rectangle r(4,5);

    Trapezoid t1(2,3,4.8);

    Triangle t2(4,5);

    Shape *p[5]={&c,&s,&r,&t1,&t2};

    double area=0.0;

    for(int i=0;i<5;i++)

    {

        area+=p[i]->area();

    }

    cout<<"all areas sum:"<<area<<endl;

    return 0;

}

猜你喜欢

转载自blog.csdn.net/2303_80770781/article/details/143094147