用c++写一个程序,定义抽象基类Container,由它派生出3个派生类,Sphere(球体)、Cylinder(圆柱体)、Cube(正方体)。用虚函数分别计算几种图形的表面积和体积
时间: 2024-03-24 09:36:17 浏览: 144
好的,下面是 C++ 代码实现:
```c++
#include <iostream>
using namespace std;
// 抽象基类 Container
class Container {
public:
virtual double getSurfaceArea() = 0; // 计算表面积的虚函数
virtual double getVolume() = 0; // 计算体积的虚函数
};
// 派生类 Sphere(球体)
class Sphere : public Container {
public:
Sphere(double r) : radius(r) {}
double getSurfaceArea() { return 4 * 3.14159 * radius * radius; } // 计算表面积
double getVolume() { return 4.0 / 3.0 * 3.14159 * radius * radius * radius; } // 计算体积
private:
double radius; // 球体半径
};
// 派生类 Cylinder(圆柱体)
class Cylinder : public Container {
public:
Cylinder(double r, double h) : radius(r), height(h) {}
double getSurfaceArea() { return 2 * 3.14159 * radius * height + 2 * 3.14159 * radius * radius; } // 计算表面积
double getVolume() { return 3.14159 * radius * radius * height; } // 计算体积
private:
double radius; // 圆柱体底面半径
double height; // 圆柱体高
};
// 派生类 Cube(正方体)
class Cube : public Container {
public:
Cube(double a) : sideLength(a) {}
double getSurfaceArea() { return 6 * sideLength * sideLength; } // 计算表面积
double getVolume() { return sideLength * sideLength * sideLength; } // 计算体积
private:
double sideLength; // 正方体边长
};
int main() {
Container* c1 = new Sphere(2.0);
Container* c2 = new Cylinder(2.0, 3.0);
Container* c3 = new Cube(2.0);
cout << "球体表面积:" << c1->getSurfaceArea() << ",体积:" << c1->getVolume() << endl;
cout << "圆柱体表面积:" << c2->getSurfaceArea() << ",体积:" << c2->getVolume() << endl;
cout << "正方体表面积:" << c3->getSurfaceArea() << ",体积:" << c3->getVolume() << endl;
delete c1;
delete c2;
delete c3;
return 0;
}
```
上面的代码中,抽象基类 Container 定义了纯虚函数 getSurfaceArea() 和 getVolume(),由三个派生类 Sphere、Cylinder 和 Cube 分别实现了这两个函数。在主函数中,我们创建了三个不同的对象,并调用他们的表面积和体积计算函数。请注意,为了实现多态,我们使用了基类指针指向派生类对象。在程序结束时,我们需要手动删除这三个对象,以释放动态分配的内存。
阅读全文