要求正方体、球、圆柱的表面积,可以抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积。
时间: 2023-12-23 07:06:13 浏览: 69
好的,这是一个典型的面向对象设计问题,可以使用抽象类和多态来实现。下面是示例代码:
```cpp
#include <iostream>
using namespace std;
// 定义抽象基类 Container
class Container {
protected:
double radius; // 半径或边长
public:
Container(double r): radius(r) {}
virtual double area() = 0; // 纯虚函数,求表面积
};
// 定义派生类 Cube,表示正方体
class Cube : public Container {
public:
Cube(double r): Container(r) {}
double area() override {
return 6 * radius * radius;
}
};
// 定义派生类 Sphere,表示球
class Sphere : public Container {
public:
Sphere(double r): Container(r) {}
double area() override {
return 4 * 3.1415926 * radius * radius;
}
};
// 定义派生类 Cylinder,表示圆柱
class Cylinder : public Container {
private:
double height; // 圆柱高
public:
Cylinder(double r, double h): Container(r), height(h) {}
double area() override {
return 2 * 3.1415926 * radius * height + 2 * 3.1415926 * radius * radius;
}
};
int main() {
Container* p = nullptr;
Cube c(2);
Sphere s(3);
Cylinder y(2, 4);
p = &c;
cout << "正方体表面积:" << p->area() << endl;
p = &s;
cout << "球的表面积:" << p->area() << endl;
p = &y;
cout << "圆柱体表面积:" << p->area() << endl;
return 0;
}
```
上述代码中,我们定义了一个抽象基类 Container,包含一个纯虚函数 area() 用于求表面积。然后我们又定义了三个派生类 Cube、Sphere 和 Cylinder,分别表示正方体、球和圆柱体,这三个类都重写了基类 Container 中的纯虚函数 area()。最后在主函数中,我们创建了一个基类指针 p,用于指向不同的派生类对象,然后通过虚函数实现了不同派生类对象的表面积计算。
阅读全文