c++题,求求大神解答

建立一个Point(点)类,包含虚函数(virtual double area() {return 0})。以它为基类,派生出一个Circle(圆)类,增加数据成员r(半径)、构造函数及求圆面积的函数area(),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高)、构造函数及求圆柱表面积的函数area()。要求编写程序,定义Circle类及Cylinder类的对象(对象数据定义时给出),利用指向基类的指针,分别输出圆的面积和圆柱体的表面积。

答案如下: 

class Point
{
public:
    Point() {}
    ~Point() {}
    virtual double area() { return 0; }
};

class Circle:public Point
{
public:
    Circle(double R) { r = R; }
    ~Circle() {}
    double area() { return 3.14*r*r; }
public:
    double r;
};

class Cylinder :public Point
{
public:
    Cylinder(double R, double H) { r = R; h = H; }
    ~Cylinder() {}
    double area() { return 2 * 3.14 * r *( r + h ); }
public:
    double r;
    double h;
};

int main()
{
    Circle *cl = new Circle(5);
    Cylinder *cyl = new Cylinder(5, 10);
    Point* p = cl;
    std::cout << "圆的面积为:" << p->area() << std::endl;
    p = cyl;
    std::cout << "圆柱体的表面积:" << p->area() << std::endl;

    if (cl != NULL)
        delete cl;

    if (cyl != NULL)
        delete cyl;
}