写一个程序,定义抽象基类container,由它派生出3个派生类:sphere,cylinder,cube,用虚函数分别计算几种图形的表面积和体积 总结
时间: 2024-02-28 17:53:47 浏览: 15
好的,这是一个比较典型的面向对象设计问题,需要使用抽象基类和虚函数来实现多态性。以下是一个简单的示例程序:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 定义抽象基类 container
class container {
public:
// 计算表面积的虚函数
virtual double surface_area() = 0;
// 计算体积的虚函数
virtual double volume() = 0;
};
// 派生类 sphere
class sphere : public container {
private:
double radius;
public:
sphere(double r) : radius(r) {}
double surface_area() override {
return 4 * M_PI * radius * radius;
}
double volume() override {
return 4.0 / 3 * M_PI * pow(radius, 3);
}
};
// 派生类 cylinder
class cylinder : public container {
private:
double radius;
double height;
public:
cylinder(double r, double h) : radius(r), height(h) {}
double surface_area() override {
return 2 * M_PI * radius * height + 2 * M_PI * radius * radius;
}
double volume() override {
return M_PI * pow(radius, 2) * height;
}
};
// 派生类 cube
class cube : public container {
private:
double length;
public:
cube(double l) : length(l) {}
double surface_area() override {
return 6 * length * length;
}
double volume() override {
return pow(length, 3);
}
};
int main() {
// 创建对象
sphere s(2.0);
cylinder c(2.0, 3.0);
cube cb(2.0);
// 输出结果
cout << "Sphere surface area: " << s.surface_area() << endl;
cout << "Sphere volume: " << s.volume() << endl;
cout << "Cylinder surface area: " << c.surface_area() << endl;
cout << "Cylinder volume: " << c.volume() << endl;
cout << "Cube surface area: " << cb.surface_area() << endl;
cout << "Cube volume: " << cb.volume() << endl;
return 0;
}
```
运行结果:
```
Sphere surface area: 50.2655
Sphere volume: 33.5103
Cylinder surface area: 62.8319
Cylinder volume: 37.6991
Cube surface area: 24
Cube volume: 8
```
可以看出,通过使用抽象基类和虚函数,我们可以方便地实现不同类的多态性,并且使得代码更加模块化和可扩展。