要求正方体、球、圆柱的表面积,可以抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积。
时间: 2023-12-23 11:06:13 浏览: 112
好的,根据您的要求,我可以为您提供以下 C++ 代码示例:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
// 定义抽象类 Container
class Container {
public:
Container(double r) : radius(r) {}
virtual double area() = 0; // 抽象虚函数
protected:
double radius; // 共享数据成员
};
// 定义球类
class Sphere : public Container {
public:
Sphere(double r) : Container(r) {}
double area() {
return 4 * M_PI * pow(radius, 2);
}
};
// 定义正方体类
class Cube : public Container {
public:
Cube(double r) : Container(r) {}
double area() {
return 6 * pow(radius, 2);
}
};
// 定义圆柱体类
class Cylinder : public Container {
public:
Cylinder(double r, double h) : Container(r), height(h) {}
double area() {
return 2 * M_PI * radius * (radius + height);
}
private:
double height;
};
int main() {
// 定义指向基类的指针
Container* p;
// 创建球对象
p = new Sphere(5);
cout << "球的表面积为:" << p->area() << endl;
delete p;
// 创建正方体对象
p = new Cube(5);
cout << "正方体的表面积为:" << p->area() << endl;
delete p;
// 创建圆柱体对象
p = new Cylinder(3, 5);
cout << "圆柱体的表面积为:" << p->area() << endl;
delete p;
return 0;
}
```
在这个示例中,抽象类 `Container` 中定义了一个共享数据成员 `radius` 和一个纯虚函数 `area()`。然后,分别从 `Container` 派生出了球类 `Sphere`、正方体类 `Cube` 和圆柱体类 `Cylinder`。这三个类都实现了 `area()` 函数,并根据自己的形状计算表面积。
在 `main()` 函数中,首先定义了一个指向基类的指针 `p`,然后分别创建了球、正方体和圆柱体的对象,并通过指针调用它们的 `area()` 函数,实现了多态特性。最后,记得要释放对象占用的内存,避免内存泄漏。
阅读全文