随机生成100个Circle、Rectangle以及Square(半径或边长也随机生成),放入shape类数组中,求它们的总面积。
时间: 2024-04-29 14:26:54 浏览: 15
好的,我来解答你的问题。
首先,我们需要定义一个Shape类,它是所有形状的基类,包含一个计算面积的虚函数。然后派生出Circle、Rectangle和Square类,并分别实现计算面积的函数。
接下来,我们可以定义一个数组,存储100个随机生成的形状对象。生成随机数可以使用rand()函数。最后,我们可以遍历数组,调用每个形状对象的计算面积函数,将它们的面积累加起来,得到总面积。
下面是代码实现:
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 100;
class Shape {
public:
virtual double getArea() = 0; // 计算面积的虚函数
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) { radius = r; }
double getArea() { return 3.1415926 * radius * radius; }
};
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) { width = w; height = h; }
double getArea() { return width * height; }
};
class Square : public Rectangle {
public:
Square(double s) : Rectangle(s, s) {}
};
int main() {
srand(time(NULL)); // 设置随机数种子
Shape *shapes[N]; // 存储形状对象的数组
double totalArea = 0.0; // 总面积
for (int i = 0; i < N; i++) {
int type = rand() % 3; // 随机生成形状类型
if (type == 0) { // 生成圆形
double radius = rand() % 10 + 1; // 随机生成半径
shapes[i] = new Circle(radius);
} else if (type == 1) { // 生成矩形
double width = rand() % 10 + 1; // 随机生成宽度
double height = rand() % 10 + 1; // 随机生成高度
shapes[i] = new Rectangle(width, height);
} else { // 生成正方形
double side = rand() % 10 + 1; // 随机生成边长
shapes[i] = new Square(side);
}
totalArea += shapes[i]->getArea(); // 累加面积
}
cout << "Total area: " << totalArea << endl; // 输出总面积
for (int i = 0; i < N; i++) {
delete shapes[i]; // 释放内存
}
return 0;
}
```
注意,在使用完形状对象数组后,需要逐个释放内存,避免内存泄漏。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)