[5.20] 写一个程序,定义抽象基类Container,由它派生出3个派生类: Sphere(球体)、 Cylinder(圆柱体)、Cube(正方体)。用虚函数分别计算几种图形的表面积和体积。
时间: 2024-05-05 18:22:16 浏览: 180
下面是一个可能的实现:
```cpp
#include <iostream>
#include <cmath>
class Container {
public:
virtual double surfaceArea() const = 0;
virtual double volume() const = 0;
};
class Sphere : public Container {
public:
explicit Sphere(double radius) : radius_(radius) {}
double surfaceArea() const override {
return 4 * M_PI * radius_ * radius_;
}
double volume() const override {
return 4.0 / 3.0 * M_PI * radius_ * radius_ * radius_;
}
private:
double radius_;
};
class Cylinder : public Container {
public:
Cylinder(double radius, double height) : radius_(radius), height_(height) {}
double surfaceArea() const override {
return 2 * M_PI * radius_ * height_ + 2 * M_PI * radius_ * radius_;
}
double volume() const override {
return M_PI * radius_ * radius_ * height_;
}
private:
double radius_;
double height_;
};
class Cube : public Container {
public:
explicit Cube(double side) : side_(side) {}
double surfaceArea() const override {
return 6 * side_ * side_;
}
double volume() const override {
return side_ * side_ * side_;
}
private:
double side_;
};
int main() {
const Container* containers[] = {
new Sphere(1.0),
new Cylinder(1.0, 2.0),
new Cube(2.0)
};
for (const auto container : containers) {
std::cout << "Surface area: " << container->surfaceArea() << std::endl;
std::cout << "Volume: " << container->volume() << std::endl;
delete container;
}
return 0;
}
```
上面的程序定义了一个抽象基类`Container`,并且派生出了三个派生类`Sphere`、`Cylinder`和`Cube`。其中,`Container`类有两个纯虚函数`surfaceArea`和`volume`,分别用来计算表面积和体积。每个派生类都实现了这两个函数,并且给出了自己的计算公式。在主函数中,我们创建了一个`Container`指针数组,并且用三个不同的派生类对象来初始化它。然后,我们遍历这个数组,依次输出每个容器的表面积和体积,并且在最后释放它们的内存。
阅读全文