已知抽象类类Shape定义如下,其中两个纯虚函数分别为计算面积getArea()和计算周长getPerim()。请通过Shape类派生出矩形类Rectangle和圆类Circle,计算各自的面积和周长,并能够按照main函数给出的测试代码完成给定的输入。 ####Shape类定义及测试程序如下: #include <iostream> using namespace std; const double PI=3.14; class Shape { public: virtual double getArea()=0; virtual double getPerim()=0; }; /*请在这里输入你的代码*/ int main(){ double r,l,w; cin>>r; cin>>l>>w; Shape *p=NULL; p=new Circle(r); print(p);//输出圆面积与周长 p=new Rectangle(l,w); print(p);//输出矩形面积与周长 return 0; } 输入样例: 1 2 3 输出样例: Area:3.14 Perimeter:6.28 Area:6 Perimeter:10
时间: 2024-03-20 08:44:46 浏览: 54
定义一个形状类(抽象类)以及一个普通成员函数(用来重设形状大小)、两个纯虚成员函数-周长计算函数和面积计算函数
以下是题目所需的代码实现:
```cpp
#include <iostream>
using namespace std;
const double PI = 3.14;
class Shape {
public:
virtual double getArea() = 0;
virtual double getPerim() = 0;
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) {
radius = r;
}
double getArea() {
return PI * radius * radius;
}
double getPerim() {
return 2 * PI * radius;
}
};
class Rectangle : public Shape {
private:
double length, width;
public:
Rectangle(double l, double w) {
length = l;
width = w;
}
double getArea() {
return length * width;
}
double getPerim() {
return 2 * (length + width);
}
};
void print(Shape *p) {
cout << "Area:" << p->getArea() << " ";
cout << "Perimeter:" << p->getPerim() << endl;
}
int main() {
double r, l, w;
cin >> r;
cin >> l >> w;
Shape *p = NULL;
p = new Circle(r);
print(p);
p = new Rectangle(l, w);
print(p);
return 0;
}
```
在上述代码中,我们首先定义了 Shape 抽象类,并在其中声明了两个纯虚函数 `getArea()` 和 `getPerim()`。接着,我们分别从 Shape 类派生出了 Circle 和 Rectangle 两个子类,并分别实现了它们自己的计算面积和周长的函数。在 main 函数中,首先读入了圆的半径和矩形的长和宽,然后分别创建了 Circle 和 Rectangle 类的对象,并通过指向 Shape 类的指针调用了它们的 `getArea()` 和 `getPerim()` 函数,最后输出了计算结果。
阅读全文