用c++写一个程序,定义抽象基类Container,由它派生出3个派生类:Sphere(球体)、 Cylinder(圆柱体)、Cube(正方体)。用虚函数分别计算几种图形的表面积和体积。并分析
时间: 2024-03-25 08:41:02 浏览: 73
好的,以下是用 C++ 实现的程序:
```c++
#include <iostream>
using namespace std;
// 定义抽象基类 Container
class Container {
public:
virtual double getVolume() = 0; // 计算体积,纯虚函数
virtual double getSurfaceArea() = 0; // 计算表面积,纯虚函数
};
// 派生类 Sphere(球体)
class Sphere : public Container {
public:
Sphere(double r) : radius(r) {}
double getVolume() { return 4.0 / 3.0 * 3.14159 * radius * radius * radius; }
double getSurfaceArea() { return 4.0 * 3.14159 * radius * radius; }
private:
double radius; // 球体半径
};
// 派生类 Cylinder(圆柱体)
class Cylinder : public Container {
public:
Cylinder(double r, double h) : radius(r), height(h) {}
double getVolume() { return 3.14159 * radius * radius * height; }
double getSurfaceArea() { return 2.0 * 3.14159 * radius * (radius + height); }
private:
double radius; // 圆柱体底面半径
double height; // 圆柱体高
};
// 派生类 Cube(正方体)
class Cube : public Container {
public:
Cube(double l) : length(l) {}
double getVolume() { return length * length * length; }
double getSurfaceArea() { return 6.0 * length * length; }
private:
double length; // 正方体边长
};
int main() {
// 创建不同的图形对象
Sphere sphere(2);
Cylinder cylinder(2, 3);
Cube cube(2);
// 计算并输出每个图形的体积和表面积
cout << "Sphere volume: " << sphere.getVolume() << ", surface area: " << sphere.getSurfaceArea() << endl;
cout << "Cylinder volume: " << cylinder.getVolume() << ", surface area: " << cylinder.getSurfaceArea() << endl;
cout << "Cube volume: " << cube.getVolume() << ", surface area: " << cube.getSurfaceArea() << endl;
return 0;
}
```
这个程序定义了一个抽象基类 `Container`,它包含两个纯虚函数 `getVolume()` 和 `getSurfaceArea()`,分别用于计算图形的体积和表面积。然后,通过 `Sphere`、`Cylinder` 和 `Cube` 三个派生类分别实现这两个纯虚函数,这些派生类都可以用 `getVolume()` 和 `getSurfaceArea()` 函数来计算它们自己的体积和表面积。
在 `main()` 函数中,我们创建了不同的图形对象,并调用它们的 `getVolume()` 和 `getSurfaceArea()` 函数来输出每个图形的体积和表面积。
通过这样的设计,我们可以轻松地添加更多的派生类来表示不同的图形,而不需要修改基类 `Container` 的定义,这就体现了面向对象编程中的开放封闭原则。
阅读全文