要求正方体、球、圆柱的表面积,可以抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积
时间: 2024-02-16 16:04:00 浏览: 72
好的,以下是程序实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Container {
public:
virtual double area() = 0; // 纯虚函数,派生类必须实现
protected:
double radius;
};
class Cube : public Container {
public:
Cube(double l) { length = l; radius = l; }
double area() { return 6 * length * length; }
private:
double length;
};
class Sphere : public Container {
public:
Sphere(double r) { radius = r; }
double area() { return 4 * M_PI * radius * radius; }
};
class Cylinder : public Container {
public:
Cylinder(double r, double h) { radius = r; height = h; }
double area() { return 2 * M_PI * radius * height + 2 * M_PI * radius * radius; }
private:
double height;
};
void printArea(Container* c) {
cout << "表面积是:" << c->area() << endl;
}
int main() {
Cube cube(3);
Sphere sphere(4);
Cylinder cylinder(2, 5);
printArea(&cube);
printArea(&sphere);
printArea(&cylinder);
return 0;
}
```
程序的核心是抽象基类Container及其三个派生类,其中Container是抽象类,定义了纯虚函数area(),这个函数在派生类中必须实现。每个派生类分别实现了Container定义的纯虚函数area(),计算并输出了正方体、球和圆柱的表面积。在程序中,我们定义了一个printArea()函数,它利用Container类指针作为参数,可以输出任何一种图形的表面积。
这样设计程序的好处是,可以方便地扩展新的图形类,只需要从Container类派生出新的图形类,并实现area()纯虚函数即可。而通用的函数printArea()可以不做修改,仍然可以输出新的图形类的表面积。
阅读全文