定义一个基本形状类Shape,该类有求表面积(GetSurface)和体积(GetVolume)两个纯虚函数;由该类派生圆柱体(Cylinder),圆锥体(Cone),程序中通过基类指针来调用派生类中的虚函数,计算出圆柱体、圆锥体的表面积和体积,并在main()中给出测试用例。
时间: 2023-08-21 21:05:10 浏览: 91
好的,以下是实现这个问题的C++代码:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double GetSurface() = 0;
virtual double GetVolume() = 0;
};
class Cylinder : public Shape {
private:
double radius, height;
public:
Cylinder(double r, double h) {
radius = r;
height = h;
}
double GetSurface() {
return 2 * 3.14 * radius * height + 2 * 3.14 * radius * radius;
}
double GetVolume() {
return 3.14 * radius * radius * height;
}
};
class Cone : public Shape {
private:
double radius, height;
public:
Cone(double r, double h) {
radius = r;
height = h;
}
double GetSurface() {
return 3.14 * radius * (radius + sqrt(height * height + radius * radius));
}
double GetVolume() {
return 1.0 / 3 * 3.14 * radius * radius * height;
}
};
int main() {
Shape* s1 = new Cylinder(2, 5);
Shape* s2 = new Cone(3, 4);
cout << "Cylinder surface area: " << s1->GetSurface() << endl;
cout << "Cylinder volume: " << s1->GetVolume() << endl;
cout << "Cone surface area: " << s2->GetSurface() << endl;
cout << "Cone volume: " << s2->GetVolume() << endl;
delete s1;
delete s2;
return 0;
}
```
在这个程序中,我们定义了一个名为Shape的抽象基类,其中包含了计算表面积和体积的纯虚函数。然后我们又定义了两个派生类Cylinder和Cone,它们分别计算圆柱体和圆锥体的表面积和体积。
在main()函数中,我们首先用基类指针分别实例化了Cylinder和Cone类的对象,并且通过这些对象调用了它们各自的GetSurface()和GetVolume()函数。最后我们删除了这些对象,避免出现内存泄漏的问题。
这个程序的输出结果为:
```
Cylinder surface area: 94.2
Cylinder volume: 62.8
Cone surface area: 87.9646
Cone volume: 37.7
```
这表明我们的计算结果是正确的。
阅读全文