type
  tshapexy=class(tobject)    //形状类
    public
      procedure draw;virtual;abstract;
  end;
type
  tpointxy=class(tshapexy)    //点类
    public
      constructor create(x0,y0:real); //默认构造函数
      procedure setpointxy(x0,y0:real); //设置坐标值的函数
      procedure draw(x0,y0:real);  //画点
      function geta1:real; //读取a1坐标值
      function getb1:real; //读取b1坐标值
    protected   //设置保护成员让派生类访问
      a1,b1:real; //点a1,b1的坐标
  end;type
  tlinexy=class(tpointxy)    //直线类
    public
      constructor create(x0,y0,x1,y1:real); //默认构造函数
      procedure setlinexy(x0,y0,x1,y1:real); //设置坐标值的函数
      procedure draw(x0,y0,x1,y1:real);  //画直线
      function geta2:real; //读取a2坐标值
      function getb2:real; //读取b2坐标值
    protected   //设置保护成员让派生类访问
      a2,b2:real; //点a2,b2的坐标
  end;type
  tcirclexy=class(tpointxy)    //圆类
    public
      constructor create(x0,y0,rr:real); //默认构造函数
      procedure setcirclexy(x0,y0,rr:real); //设置坐标值的函数
      procedure circlepoint(x,y,x0,y0:real);
      procedure draw(x0,y0,rr:real);  //画圆
      function getr:real; //读取r大小
    protected   //设置保护成员让派生类访问
      r:real; //r的大小
  end;
type
  tellipsexy=class(tpointxy)    //椭圆类
    public
      constructor create(x0,y0,aa,bb:real); //默认构造函数
      procedure setellipsexy(x0,y0,aa,bb:real); //设置坐标值的函数
      procedure putfour(x0,y0,x,y:real);
      procedure draw(x0,y0,aa,bb:real);  //画椭圆
      function geta:real; //读取a大小
      function getb:real; //读取b大小
    protected   //设置保护成员让派生类访问
      a,b:real; //a,b的大小
  end;
type
  trectxy=class(tpointxy)    //矩形类
    public
      constructor create(x0,y0,x1,y1:real); //默认构造函数
      procedure setrectxy(x0,y0,x1,y1:real); //设置坐标值的函数
      procedure draw(x0,y0,x1,y1:real);  //画矩形
      function geta3:real; //读取a3大小
      function getb3:real; //读取b3大小
    protected   //设置保护成员让派生类访问
      a3,b3:real; //点a3,b3的坐标
  end;