请用C++编写下面的

定义一个形状类Shape,提供计算周长getPerimeter()和面积getArea()的函数 定义一个子类正方形类Square继承自Shape类,拥有边长属性,提供构造函数,能够计算周长getPerimeter()和面积getArea() 定义一个子类长方形类Rectangle继承自Square类,拥有长、宽属性,提供构造函数,能够计算周长getPerimeter()和面积getArea() 定义一个子类圆形类Circle继承自Shape,拥有半径属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()

在main函数中,分别构造三个Shape类的变量,分别指向一个Square、Rectangle、Circle对象,并输出他们的周长、面积.

输入格式:
正方形类的边长 长方形类的长宽 圆类的半径

输出格式:
正方形的周长、面积 长方形的周长、面积 圆形的周长、面积

输入样例:
在这里给出一组输入。例如:

1
1 2
2
输出样例:
在这里给出相应的输出。例如:

4.00 1.00
6.00 2.00
12.57 12.57

实话说,这抽象是一点用也没有

#include <iomanip>
#include <iostream>
using namespace std;
const double pi = 3.1416;

class Shape {
public:
  double getPerimeter() { return -1; };
  double getArea() { return -1; };
};

class Square : public Shape {
private:
  double len;

public:
  Square(double len) : len(len){};
  double getPerimeter() { return len * 4; }
  double getArea() { return len * len; }
};
class Rectangle : public Shape {
private:
  double width, height;

public:
  Rectangle(double width, double height) : width(width), height(height) {}
  double getPerimeter() { return (width + height) * 2; }
  double getArea() { return width * height; }
};

class Circle : public Shape {
private:
  double radius;

public:
  Circle(double radius) : radius(radius) {}
  double getPerimeter() { return 2 * pi * radius; }
  double getArea() { return pi * radius * radius; }
};

int main() {
  double len, width, height, radius;
  cin >> len >> width >> height >> radius;
  Square square = Square(len);
  Rectangle rect = Rectangle(width, height);
  Circle circle = Circle(radius);
  cout << fixed << setprecision(2);
  cout << square.getPerimeter() << " " << square.getArea() << endl;
  cout << rect.getPerimeter() << " " << rect.getArea() << endl;
  cout << circle.getPerimeter() << " " << circle.getArea() << endl;
  return 0;
}