派生与继承的虚函数问题,有大佬帮忙看看吗

设计基类点类(Point)、直接派生类圆类(Circle)、间接派生类圆柱体类(Cylinder),将求面积的函数(area)声明成虚函数,并在主函数实现虚函数调用,输出点类、圆类和圆柱体类面积。
(点类可以直接return 0)

#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h>

using namespace std;
class Point{
public:
    Point(){mArea = 0.0;}
    virtual double area(){return mArea;}
protected:
    double mArea;
};
class Circle:public Point{
public:
    Circle(double r){
        mArea = M_PI*r*r;
    }
};
class Cylinder:public Circle{
public:
    Cylinder(double r,double h):Circle(r){
        mArea = (M_PI*r*r + M_PI*r*h)*2.0;
    }
};

int main()
{
    Point *point = new Point;
    std::cout << point->area() << std::endl;

    Point *circle = new Circle(3.5);
    std::cout << circle->area() << std::endl;

    Point *cylinder = new Cylinder(3.5,10);
    std::cout << cylinder->area() << std::endl;

    return 0;
}

///////////////////////////////////////////
//////////////////////////////////////////

#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h>

using namespace std;
class Point{
public:
    Point():mR(0.0){}
    virtual double area(){return 0.0;}
protected:
    double mR;
};
class Circle:public Point{
public:
    Circle(double r){ mR = r;}
    virtual double area(){return M_PI*mR*mR;}
};
class Cylinder:public Circle{
public:
    Cylinder(double r,double h):Circle(r),mH(h){
    }
    virtual double area(){return (M_PI*mR*mR + M_PI*mR*mH)*2.0;}
protected:
    int mH;
};

int main()
{
    Point *point = new Point;
    std::cout << point->area() << std::endl;

    Point *circle = new Circle(3.5);
    std::cout << circle->area() << std::endl;

    Point *cylinder = new Cylinder(3.5,10);
    std::cout << cylinder->area() << std::endl;

    return 0;
}