在形状类Shape的基础之上,编写两个派生类长方类Rectangle和圆类Circle,对基类Shape类中的Area( )纯虚函数重新实现,长方的面积是长乘宽,圆的面积是π半径平方,在主函数中种类随机地创建100个形状,计算这100个形状面积的和。
时间: 2024-03-10 10:46:47 浏览: 56
矩形类及派生类,算面积、体积
好的,我理解了你的问题。以下是代码实现:
```c++
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
using namespace std;
class Shape {
public:
virtual double Area() = 0;
};
class Rectangle : public Shape {
private:
double length;
double width;
public:
Rectangle() {
length = rand() % 10 + 1;
width = rand() % 10 + 1;
}
double Area() {
return length * width;
}
};
class Circle : public Shape {
private:
double radius;
public:
Circle() {
radius = rand() % 10 + 1;
}
double Area() {
return M_PI * pow(radius, 2);
}
};
int main() {
srand(time(NULL));
Shape* shapes[100];
double totalArea = 0;
for (int i = 0; i < 100; i++) {
int choice = rand() % 2;
if (choice == 0) {
shapes[i] = new Rectangle();
}
else {
shapes[i] = new Circle();
}
totalArea += shapes[i]->Area();
}
cout << "Total area of 100 shapes: " << totalArea << endl;
return 0;
}
```
在这个代码中,我们定义了一个抽象基类 `Shape`,其中只有一个纯虚函数 `Area()`,表示计算形状的面积。然后,我们创建了两个派生类 `Rectangle` 和 `Circle`,它们分别表示长方形和圆形。在这两个派生类中,我们重新实现了 `Area()` 函数,分别计算长方形和圆形的面积。
在 `main()` 函数中,我们首先使用 `srand()` 函数设置随机数种子,然后创建了一个包含 100 个 `Shape` 类型指针的数组 `shapes`。接着,我们使用 `rand()` 函数随机地创建长方形和圆形对象,并将它们的指针存储在 `shapes` 数组中。在每个对象创建后,我们都调用了它的 `Area()` 函数,计算出了该形状的面积,并将其加入到 `totalArea` 变量中。最后,我们输出了所有形状的总面积。
值得注意的是,我们在 `Rectangle` 和 `Circle` 的构造函数中使用了 `rand()` 函数来随机生成它们的尺寸和半径。同时,我们也使用了 `<cmath>` 头文件中的 `M_PI` 宏来表示圆周率。
阅读全文