写一个程序,定义抽象基类Shape,它有三个公有派生类:类Circle用来描述圆形,类Rectangle用来描述矩形,类Triangle用来描述三角形。用虚函数area( )分别计算几种图形的面积,并求它们的和。
#include<iostream>
#include<math.h>
#define pi 3.1415926 //全局常量圆周率
using namespace std;
class Shape { //抽象基类Shap
public:
virtual double area() = 0; //声明area函数为纯虚函数
};
class Circle :public Shape { //派生类圆
public:
Circle(double r):r(r){} //构造函数
virtual double area(){ //圆的面积
return pi * r*r;
}
private:
double r;
};
class Rectangle :public Shape{ //派生类矩形
public:
Rectangle(double x,double y):x(x),y(y){}
virtual double area() //派生类的同名函数自动成为虚函数,virtual可加可不加
{ //矩形面积长乘宽
return x*y;
}
private:
double x, y;
};
class Triangle :public Shape { //派生类三角形
public:
Triangle(double x, double y,double z) :x(x), y(y),z(z) {}
virtual double area() //已知三角形三边,利用 海伦公式 计算面积
{
double p = (x + y + z) / 2;
return sqrt(p*(p-x)*(p-y)*(p-z));
}
private:
double x, y, z;
};
int main() {
Circle C(2);
Rectangle R(2, 4);
Triangle T(3, 4, 5);
Shape *index = &C; //定义指向抽象基类对象Shape的指针变量index,指向Circle类对象C
cout << "Circle area:" << index->area() << endl; //调用Circle类对象C的area函数并输出
index = &R; //让index指向Rectangle类对象R
cout << "Rectangle area:" << index->area() << endl;
index = &T;
cout << "Triangle area:" << index->area() << endl;
cout << "area sum= " << C.area() + R.area() + T.area() << endl;//静态关联算总面积
return 0;
}
运行结果⬇