抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。有正方体、球、圆柱的表面积三个派生类。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积。
时间: 2024-02-16 19:04:19 浏览: 65
定义三个类Point,Circle和Cylinder,Point类为基类,为上述3个类添加计算面积的成员函数Area(),要求函数Area()采用虚函数的形式,并通过基类指针调用虚函数Area()。
5星 · 资源好评率100%
好的,我知道你的问题了。下面是代码实现:
```cpp
#include <iostream>
using namespace std;
class Container {
public:
virtual double area() = 0; // 纯虚函数
protected:
double radius;
};
class Cube : public Container {
public:
Cube(double r) { radius = r; }
double area() { return 6 * radius * radius; }
};
class Sphere : public Container {
public:
Sphere(double r) { radius = r; }
double area() { return 4 * 3.14159 * radius * radius; }
};
class Cylinder : public Container {
public:
Cylinder(double r, double h) { radius = r; height = h; }
double area() { return 2 * 3.14159 * radius * height + 2 * 3.14159 * radius * radius; }
private:
double height;
};
int main() {
Container* c1 = new Cube(2.0);
Container* c2 = new Sphere(2.0);
Container* c3 = new Cylinder(2.0, 3.0);
cout << "Cube surface area: " << c1->area() << endl;
cout << "Sphere surface area: " << c2->area() << endl;
cout << "Cylinder surface area: " << c3->area() << endl;
delete c1;
delete c2;
delete c3;
return 0;
}
```
在这个程序中,我们定义了一个抽象类 Container,其中包含一个公共的数据成员 radius,并定义了一个求表面积的纯虚函数 area()。然后我们分别定义了三个派生类 Cube、Sphere 和 Cylinder。
在主函数中,我们创建了三个指向基类的指针,并分别指向一个 Cube、一个 Sphere 和一个 Cylinder 对象。然后我们利用基类指针调用了各自的 area() 函数,分别计算了三种图形的表面积。
注意,我们在程序结尾处利用 delete 关键字释放了动态分配的内存。
阅读全文