C++语言编写面向对象程序,实现柱体体积和表面积的计算(等柱体,比如三棱柱,四棱柱,五棱柱等,截面积相同的情况下,体积=底面积*高)。 例如底面半径为 2、高为 4 的圆柱,体积为 50.27,表面积为75.40;以长为 3、宽为 2 的长方形为底面,高为 5 的四棱柱,体积为 30,表面积为 62。 注意: 定义一个描述平面图形的基类 Plane 定义一个描述柱体的基类 Body 从虚基类 Plane 派生出具体类(如长方形类 Rectangle、圆形类 Circle 和三角形类triangle,由Rectangle派生出正方形Square类),根据实际情况,覆盖基类 Plane 的求面积函数 area() 和Body的求体积函数volume()。 4、从具体triangle类、square及Circle和Body类派生出Triangularprism(三棱柱), quadrangular(四棱柱), circularcolumn(圆柱)类 5、已知一组棱柱体,由不同的柱体组成,求该组柱体的体积之和和表面积之和
时间: 2024-01-22 14:19:19 浏览: 123
以下是基于题目要求的 C++ 代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
class Plane {
public:
virtual double area() = 0;
};
class Body {
public:
virtual double volume() = 0;
virtual double surfaceArea() = 0;
};
class Rectangle : virtual public Plane {
protected:
double length, width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
double area() override { return length * width; }
};
class Square : public Rectangle {
public:
Square(double s) : Rectangle(s, s) {}
};
class Circle : virtual public Plane {
protected:
double radius;
public:
Circle(double r) : radius(r) {}
double area() override { return M_PI * radius * radius; }
};
class Triangle : virtual public Plane {
protected:
double a, b, c;
public:
Triangle(double side1, double side2, double side3) : a(side1), b(side2), c(side3) {}
double area() override {
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
};
class TriangularPrism : public Triangle, public Body {
protected:
double height;
public:
TriangularPrism(double side1, double side2, double side3, double h) : Triangle(side1, side2, side3), height(h) {}
double volume() override { return area() * height; }
double surfaceArea() override { return 2 * area() + perimeter() * height; }
double perimeter() { return a + b + c; }
};
class Quadrangular : public Rectangle, public Body {
protected:
double height;
public:
Quadrangular(double l, double w, double h) : Rectangle(l, w), height(h) {}
double volume() override { return area() * height; }
double surfaceArea() override { return 2 * (length * height + width * height) + 2 * area(); }
};
class CircularColumn : public Circle, public Body {
protected:
double height;
public:
CircularColumn(double r, double h) : Circle(r), height(h) {}
double volume() override { return area() * height; }
double surfaceArea() override { return 2 * M_PI * radius * height + 2 * area(); }
};
int main() {
TriangularPrism tp(3, 4, 5, 5);
Quadrangular q(2, 3, 5);
CircularColumn cc(2, 4);
Body* bodies[] = { &tp, &q, &cc };
double total_volume = 0, total_surface_area = 0;
for (auto b : bodies) {
total_volume += b->volume();
total_surface_area += b->surfaceArea();
}
cout << "Total volume: " << total_volume << endl;
cout << "Total surface area: " << total_surface_area << endl;
return 0;
}
```
以上代码中,我们定义了 Plane 和 Body 两个虚基类,Plane 中有求面积的纯虚函数 area(),Body 中有求体积和表面积的纯虚函数 volume() 和 surfaceArea()。然后我们从 Plane 派生出 Rectangle、Circle 和 Triangle,从 Rectangle 派生出 Square。接着,从 Triangle、Square 和 Circle 派生出 TriangularPrism、Quadrangular 和 CircularColumn。
在 TriangularPrism、Quadrangular 和 CircularColumn 中,我们实现了 volume() 和 surfaceArea() 函数,并根据需要调用了 area() 函数。
最后,在 main 函数中,我们定义了一个指向 Body 类的指针数组 bodies,用于存储一组棱柱体。然后遍历该数组,分别计算每个棱柱体的体积和表面积,并累加到总体积和总表面积中。最终输出结果。
阅读全文