声明一个Shape抽象类,在此基础上派生出Rectangle类和Circle类,两者都有GetArea()和GetPerim()函数,用来计算面积和周长,麻烦封装以上各类,编写程序。需要提交类shape、Rectangle、Cricle类 Input 第一行输入n,表示n个测试例子;接下来有n行,每一行输入数,a、b、c,表示矩形的宽、长,以及圆形的半径 Output 对应每一行输入: 第一行输出矩形的面积、周长 第二行输出圆形的面积、周长 Sample_Input 1 2 2 3 Sample_Ouput 4 8 28.26 18.84 Hint const double PI = 3.14; (Already defined)
时间: 2024-02-05 16:12:53 浏览: 26
以下是题目所需的抽象类 Shape、Rectangle 和 Circle 的代码实现。
```
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.14;
class Shape{
public:
virtual double GetArea() = 0;
virtual double GetPerim() = 0;
};
class Rectangle : public Shape{
public:
Rectangle(double w, double h){
width = w;
height = h;
}
double GetArea(){
return width * height;
}
double GetPerim(){
return 2 * (width + height);
}
private:
double width;
double height;
};
class Circle : public Shape{
public:
Circle(double r){
radius = r;
}
double GetArea(){
return PI * pow(radius, 2);
}
double GetPerim(){
return 2 * PI * radius;
}
private:
double radius;
};
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i++){
double a, b, c;
cin >> a >> b >> c;
Rectangle r(a, b);
Circle cir(c);
cout << r.GetArea() << " " << r.GetPerim() << endl;
cout << cir.GetArea() << " " << cir.GetPerim() << endl;
}
return 0;
}
```
这里使用了纯虚函数和多态,将 Shape 定义为一个抽象类,Rectangle 和 Circle 继承自 Shape,并实现了 GetArea() 和 GetPerim() 方法。在 main 函数中,先输入测试用例的个数,然后依次输入每个测试用例中矩形的宽和长,以及圆形的半径。对于每个测试用例,创建一个 Rectangle 和一个 Circle 的对象,然后分别调用 GetArea() 和 GetPerim() 方法,输出矩形的面积和周长,以及圆形的面积和周长。