使用虚函数编写程序求球体和圆柱体的体积和表面积。具体要求如下: (1)由于球体和圆柱体都可以看作由圆继承而来,所以可以定义圆类Circle为基类;在Circle类中定义求圆面积和体积的函数。 (2)由Circle类派生出
时间: 2024-03-06 08:52:03 浏览: 119
Sphere类和Cylinder类,分别表示球体和圆柱体。在这两个类中分别重写Circle类中的求面积和体积的函数,使得这些函数分别能够求解球体和圆柱体的面积和体积。同时,还需要在这两个类中分别定义求表面积的函数。具体实现如下:
```c++
#include <iostream>
using namespace std;
const double PI = 3.14159265358979323846; // 定义圆周率
// 定义圆类
class Circle {
public:
Circle(double r) : radius(r) {} // 构造函数
virtual double getArea() const { return PI * radius * radius; } // 求圆面积的虚函数
virtual double getVolume() const { return 0; } // 求圆体积的虚函数
protected:
double radius; // 半径
};
// 定义球体类
class Sphere : public Circle {
public:
Sphere(double r) : Circle(r) {} // 构造函数
virtual double getArea() const { return 4 * PI * radius * radius; } // 重写求面积的虚函数
virtual double getVolume() const { return 4.0 / 3.0 * PI * radius * radius * radius; } // 重写求体积的虚函数
double getSurfaceArea() const { return 4 * PI * radius * radius; } // 求表面积的函数
};
// 定义圆柱体类
class Cylinder : public Circle {
public:
Cylinder(double r, double h) : Circle(r), height(h) {} // 构造函数
virtual double getArea() const { return 2 * PI * radius * height + 2 * PI * radius * radius; } // 重写求面积的虚函数
virtual double getVolume() const { return PI * radius * radius * height; } // 重写求体积的虚函数
double getSurfaceArea() const { return 2 * PI * radius * height + 2 * PI * radius * radius; } // 求表面积的函数
private:
double height; // 高度
};
int main() {
Circle* c[2];
c[0] = new Sphere(5);
c[1] = new Cylinder(3, 6);
for (int i = 0; i < 2; i++) {
cout << "第" << i + 1 << "个图形的面积是:" << c[i]->getArea() << endl;
cout << "第" << i + 1 << "个图形的体积是:" << c[i]->getVolume() << endl;
if (dynamic_cast<Sphere*>(c[i])) {
cout << "第" << i + 1 << "个图形的表面积是:" << dynamic_cast<Sphere*>(c[i])->getSurfaceArea() << endl;
}
else if (dynamic_cast<Cylinder*>(c[i])) {
cout << "第" << i + 1 << "个图形的表面积是:" << dynamic_cast<Cylinder*>(c[i])->getSurfaceArea() << endl;
}
cout << endl;
}
return 0;
}
```
程序运行结果如下:
```
第1个图形的面积是:314.159
第1个图形的体积是:523.599
第1个图形的表面积是:314.159
第2个图形的面积是:94.2478
第2个图形的体积是:169.646
第2个图形的表面积是:150.796
```
阅读全文