目录
题目
写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形),Square(正方形),Rectangle(矩形)。用虚函数分别计算几种图形面积,并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。
源码
#include <iostream>
#include <cmath>
using namespace std;
class Shape
{
public:
virtual double printarea() const = 0;
virtual ~Shape(){};
};
class Rectangle : public Shape
{
private:
double length;
double width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
virtual double printarea() const { return length * width; }
};
class Circle : public Shape
{
private:
double radius;
public:
Circle(double r) : radius(r) {}
virtual double printarea() const { return M_PI * radius * radius; }
};
class Square : public Shape
{
private:
double length;
public:
Square(double l) : length(l) {}
virtual double printarea() const { return pow(length, 2); }
};
int main()
{
Shape *sp[3];
Circle c(2.0);
Square s(3.0);
Rectangle r(5.0, 4.0);
double sum = 0;
sp[0] = &c;
sp[1] = &s;
sp[2] = &r;
cout << "圆形的面积为:" << sp[0]->printarea()<<endl;
cout << "矩形的面积为:" << sp[1]->printarea()<<endl;
cout << "正方形的面积为:" << sp[2]->printarea()<<endl;
for (int i = 0; i < 3;++i)
{
sum += sp[i]->printarea();
}
cout << "面积之和为:" << sum;
return 0;
}