以下程序用c++该怎么实现

计划建造一个溜冰场,溜冰场为圆形或者矩形,已知,每平米溜冰场造价35元,溜冰场周围的栏杆每米造价20元。编写函数用于计算不同大小圆形和矩形溜冰场的造价。

实现方法:
(1)定义一个shape抽象类,shape抽象类中有:
 面积Area( )和周长Primeter( )的纯虚函数
 表示shape平面位置坐标的成员变量X,Y
(2)shape抽象类派生出Rectangle类和Circle类,计算各派生类对象的面积Area( )和周长Primeter( ).
(3)定义函数double cost(shape &s)用于计算圆形溜冰场或者矩形溜冰场的造价。

#include <iostream>
using namespace std;
#define PI 3.1415926
class shape
{
protected:
    int x,y;
public:
    virtual double Area() = 0;
    virtual double Primeter() = 0;
};

class Rectangle : public shape
{
protected:
    int x0,y0;
public:
    Rectangle(int x1,int y1,int x2,int y2) {x=x1;y=y1;x0=x2;y0=y2;}
    double Area() {return (x-x0)*(y-y0);}
    double Primeter() {return 2*((x-x0)+(y-y0));}
};

class Circle :public shape
{
protected:
    double r;
public:
    Circle(int x1,int y1,double r1) {x=x1;y=y1;r=r1;};
    double Area() {return PI*r*r;}
    double Primeter() {return 2*PI*r;}
};

double cost(shape &s)
{
    return 35*s.Area() + 20*s.Primeter();
}

int main()
{
    Rectangle r1(1,2,10,20);
    Circle c1(1,2,10);
    printf("%.2f\n",cost(r1));
    printf("%.2f\n",cost(c1));
    return 0;
}