//设计一个计算图形面积的类库。
//类库的顶层是一个抽象类Shape,并且提供三个纯虚函数;显示数据成员、返回面积和返回体积。
//由Shape类派生Shape2D(二维图形)和Shape3D(三维图形),增加了有关的数据成员
//派生具体的图形类。
//派生Circle(圆)、Rectangle(矩形)。
//在主函数测试中使用多态方式调用不同对象的求值函数。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
const double PI = 3.1415926;
//创建一个抽象类
class Shape
{
public:
virtual ~Shape(){} //虚析构
virtual double GetArea() = 0; //返回面积
virtual double GetPerim() = 0; //返回周长
};
// 圆形
class Circle :public Shape
{
public:
double mRadius; //半径
Circle(double r) // 构造函数
:mRadius(r){
cout << "ctor Circle" << endl;
}
~Circle()
{
cout << "dtor Circle" << endl;
}
// 计算面积
double GetArea()
{
return PI * mRadius * mRadius;
}
// 计算周长
double GetPerim()
{
return 2 * PI * mRadius;
}
};
// 方形
class Rectangle :public Shape
{
public:
double mWide, mTall;// 长宽
Rectangle(double w, double h)// 构造函数
:mWide(w), mTall(h) {
cout << "ctor Rectangle" << endl;
}
~Rectangle()
{
cout << "dtor Rectangle" << endl;
}
// 计算面积
double GetArea()
{
return mWide * mTall;
}
// 计算周长
double GetPerim()
{
return 2 * (mWide + mTall);
}
};
// 多态方法调用
void fun(Shape *s)
{
cout << "面积:" << s->GetArea()
<< "周长:" << s->GetPerim()
<< endl;
}
int main(void)
{
Circle t1(1.0);
Rectangle t3(2.0, 3);
fun(&t1);
fun(&t3);
// 暂停
system("pause");
return EXIT_SUCCESS;
}