写一个程序,定义抽象基类Container,由它派生出3个派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体)。用虚函数分别计算几种图形的表面积和体积。)
时间: 2024-03-25 07:41:32 浏览: 83
好的,以下是一个实现上述要求的程序示例:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
// 抽象基类 Container
class Container {
public:
virtual double getVolume() const = 0; // 纯虚函数,计算体积
virtual double getArea() const = 0; // 纯虚函数,计算表面积
};
// 派生类 Sphere(球体)
class Sphere : public Container {
private:
double radius;
public:
Sphere(double r) : radius(r) {}
// 重写虚函数,计算球体的体积
virtual double getVolume() const override {
return (4.0 / 3.0) * M_PI * pow(radius, 3);
}
// 重写虚函数,计算球体的表面积
virtual double getArea() const override {
return 4.0 * M_PI * pow(radius, 2);
}
};
// 派生类 Cylinder(圆柱体)
class Cylinder : public Container {
private:
double radius;
double height;
public:
Cylinder(double r, double h) : radius(r), height(h) {}
// 重写虚函数,计算圆柱体的体积
virtual double getVolume() const override {
return M_PI * pow(radius, 2) * height;
}
// 重写虚函数,计算圆柱体的表面积
virtual double getArea() const override {
return (2 * M_PI * radius * height) + (2 * M_PI * pow(radius, 2));
}
};
// 派生类 Cube(正方体)
class Cube : public Container {
private:
double length;
public:
Cube(double l) : length(l) {}
// 重写虚函数,计算正方体的体积
virtual double getVolume() const override {
return pow(length, 3);
}
// 重写虚函数,计算正方体的表面积
virtual double getArea() const override {
return 6 * pow(length, 2);
}
};
int main() {
// 创建不同的图形对象
Sphere sphere(2.5);
Cylinder cylinder(2, 5);
Cube cube(3);
// 通过基类指针调用不同的虚函数
Container *p;
p = &sphere;
cout << "Sphere:" << endl;
cout << "Volume = " << p->getVolume() << endl;
cout << "Area = " << p->getArea() << endl;
p = &cylinder;
cout << "Cylinder:" << endl;
cout << "Volume = " << p->getVolume() << endl;
cout << "Area = " << p->getArea() << endl;
p = &cube;
cout << "Cube:" << endl;
cout << "Volume = " << p->getVolume() << endl;
cout << "Area = " << p->getArea() << endl;
return 0;
}
```
在上述程序中,`Container`是一个抽象基类,它定义了两个纯虚函数`getVolume()`和`getArea()`,分别用于计算图形的体积和表面积。然后,`Sphere`、`Cylinder`和`Cube`三个派生类分别实现了这两个虚函数。在`main()`函数中,我们通过基类指针调用不同的虚函数,来计算不同图形的体积和表面积。
阅读全文