要求正方体、球、圆柱的表面积,可以抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积。
时间: 2023-12-23 22:06:02 浏览: 88
好的,这是一个经典的面向对象编程问题。以下是对应的代码实现:
```c++
#include <iostream>
using namespace std;
class Container {
public:
double radius; // 公共的数据成员
virtual double area() = 0; // 纯虚函数求表面积
};
class Cube : public Container {
public:
double area() override { // 求正方体表面积的具体实现
return 6 * radius * radius;
}
};
class Sphere : public Container {
public:
double area() override { // 求球表面积的具体实现
return 4 * 3.14159 * radius * radius;
}
};
class Cylinder : public Container {
public:
double height; // 圆柱体的高
double area() override { // 求圆柱体表面积的具体实现
return 2 * 3.14159 * radius * height + 2 * 3.14159 * radius * radius;
}
};
int main() {
Container* pc;
Cube c;
c.radius = 2.0;
pc = &c;
cout << "Cube表面积:" << pc->area() << endl;
Sphere s;
s.radius = 2.0;
pc = &s;
cout << "Sphere表面积:" << pc->area() << endl;
Cylinder cl;
cl.radius = 2.0;
cl.height = 3.0;
pc = &cl;
cout << "Cylinder表面积:" << pc->area() << endl;
return 0;
}
```
输出结果:
```
Cube表面积:24
Sphere表面积:50.2654
Cylinder表面积:62.8318
```
这里利用了基类指针和虚函数的特性,实现了不同的派生类对象通过基类指针调用同名的虚函数,能够自动选择调用对应的派生类中的实现,从而实现了多态性。
阅读全文