编写一个程序,声明抽象基类Shape(内含纯虚函数virtual double area()=0),由它派生出3个派生类: Circle(圆形: 增加数据成员r(半径)、公有成员有构造函数及求圆面积的函数area()函数);Rectangle(矩形:新增数据成员side(边长),公有成员有构造函数和求正方形面积的area()函数);Triangle(三角形:新增数据成员side(底边长)、height(底边上的高),公有成员有构造函数和求三角形面积的area()函数)。要求编写程序,用一个函数void printArea(const Shape *p),分别输出以上三者的面积,3个图形的数据在定义对象时给定。
答案如下:
class Shape
{
public:
Shape() {}
~Shape() {}
virtual double area() const = 0;
};
class Circle :public Shape
{
public:
Circle(const double R) { r = R; }
~Circle() {}
virtual double area() const { return 3.14 * r * r; }
public:
double r;
};
class Rectangle :public Shape
{
public:
Rectangle(double S) { side = S; }
~Rectangle() {}
virtual double area() const { return side * side; }
public:
double side;
};
class Triangle :public Shape
{
public:
Triangle(double S, double H) { side = S; height = H; }
~Triangle() {}
virtual double area() const { return 1.0 / 2.0 * side * height; }
public:
double side;
double height;
};
void printArea(const Shape* p)
{
std::cout << "面积为:" << p->area()<<std::endl;
}
int main()
{
Shape* p = new Circle(5);
printArea(p);
if (p != NULL)
{
delete p;
p = NULL;
}
if (p == NULL)
{
p = new Rectangle(6);
printArea(p);
}
if (p != NULL)
{
delete p;
p = NULL;
}
if (p == NULL)
{
p = new Triangle(5,10);
printArea(p);
}
if (p != NULL)
{
delete p;
p = NULL;
}
}