写一个程序,定义抽象基类container,由它派生出3个派生类:sphere,cylinder,cube,用虚函数分别计算几种图形的表面积和体积
时间: 2024-02-28 11:53:36 浏览: 103
好的,下面是程序的实现:
```
#include <iostream>
#include <cmath>
using namespace std;
class Container {
public:
virtual double volume() = 0; // 计算体积的虚函数
virtual double surfaceArea() = 0; // 计算表面积的虚函数
};
class Sphere : public Container { // 派生类1:球
private:
double radius;
public:
Sphere(double r) : radius(r) {}
double volume() {
return (4.0/3.0)*M_PI*pow(radius,3);
}
double surfaceArea() {
return 4*M_PI*pow(radius,2);
}
};
class Cylinder : public Container { // 派生类2:圆柱体
private:
double radius, height;
public:
Cylinder(double r, double h) : radius(r), height(h) {}
double volume() {
return M_PI*pow(radius,2)*height;
}
double surfaceArea() {
return 2*M_PI*radius*height + 2*M_PI*pow(radius,2);
}
};
class Cube : public Container { // 派生类3:立方体
private:
double edge;
public:
Cube(double e) : edge(e) {}
double volume() {
return pow(edge,3);
}
double surfaceArea() {
return 6*pow(edge,2);
}
};
int main() {
Container *s = new Sphere(3.0); // 创建球
Container *c = new Cylinder(2.0, 5.0); // 创建圆柱体
Container *b = new Cube(4.0); // 创建立方体
cout << "球的体积为:" << s->volume() << endl;
cout << "球的表面积为:" << s->surfaceArea() << endl;
cout << "圆柱体的体积为:" << c->volume() << endl;
cout << "圆柱体的表面积为:" << c->surfaceArea() << endl;
cout << "立方体的体积为:" << b->volume() << endl;
cout << "立方体的表面积为:" << b->surfaceArea() << endl;
delete s;
delete c;
delete b;
return 0;
}
```
程序定义了一个抽象基类 Container,其中包含了两个虚函数 volume() 和 surfaceArea(),分别用于计算图形的体积和表面积。然后程序又定义了三个派生类 Sphere、Cylinder 和 Cube,它们分别表示球、圆柱体和立方体,并且都继承了 Container 类。
在每个派生类中,都重新实现了基类的虚函数 volume() 和 surfaceArea()。这里需要注意的是,每个派生类都有自己的数据成员,并且需要在构造函数中初始化。
最后,在主函数中创建了三个不同的对象,并且通过指针调用了它们的虚函数 volume() 和 surfaceArea()。注意,由于 Container 是一个抽象基类,不能创建对象,因此这里使用了指针。
输出结果如下:
```
球的体积为:113.097
球的表面积为:113.097
圆柱体的体积为:62.8319
圆柱体的表面积为:87.9646
立方体的体积为:64
立方体的表面积为:96
```
阅读全文