虚函数之球体与圆柱体 使用虚函数编写程序求球体和圆柱体的体积及表面积。 由于球体和圆柱体都可以看做由圆继承而来,所以可以定义圆类作为基类。在Circle类中定义一个数据成员 radius半径和两个虚函数area()和vo
时间: 2023-12-03 09:44:43 浏览: 111
lume()分别用于求圆的面积和体积,然后在Circle类的基础上分别派生出Sphere类和Cylinder类。在Sphere类中重新定义area()和volume()函数以求球体的面积和体积,在Cylinder类中重新定义area()和volume()函数以求圆柱体的面积和体积。最后在主函数中创建对象并调用相应的函数计算并输出结果。
具体实现如下:
```c++
#include <iostream>
using namespace std;
class Circle {
protected:
double radius; // 圆的半径
public:
Circle(double r=0) { radius = r; }
virtual double area() { return 0; } // 求圆的面积(虚函数)
virtual double volume() { return 0; } // 求圆的体积(虚函数)
};
class Sphere: public Circle {
public:
Sphere(double r=0): Circle(r) {}
virtual double area() { return 4 * 3.14 * radius * radius; } // 求球体的表面积(重定义虚函数)
virtual double volume() { return 4/3.0 * 3.14 * radius * radius * radius; } // 求球体的体积(重定义虚函数)
};
class Cylinder: public Circle {
protected:
double height; // 圆柱体的高
public:
Cylinder(double r=0, double h=0): Circle(r), height(h) {}
virtual double area() { return 2 * 3.14 * radius * (radius + height); } // 求圆柱体的表面积(重定义虚函数)
virtual double volume() { return 3.14 * radius * radius * height; } // 求圆柱体的体积(重定义虚函数)
};
int main() {
Circle *p; // 定义指向圆类对象的指针
Sphere s(5); // 创建球体对象
Cylinder c(3, 8); // 创建圆柱体对象
p = &s; // 指针指向球体对象
cout << "球体的表面积:" << p->area() << endl; // 调用球体的area()函数
cout << "球体的体积:" << p->volume() << endl; // 调用球体的volume()函数
p = &c; // 指针指向圆柱体对象
cout << "圆柱体的表面积:" << p->area() << endl; // 调用圆柱体的area()函数
cout << "圆柱体的体积:" << p->volume() << endl; // 调用圆柱体的volume()函数
return 0;
}
```
输出结果为:
```
球体的表面积:314
球体的体积:523.333
圆柱体的表面积:150.72
圆柱体的体积:226.08
```
阅读全文