定义一个基本形状类Shape,该类有求表面积(GetSurface)和体积(GetVolume)两个纯虚函数;由该类派生圆柱体(Cylinder),圆锥体(Cone),程序中通过基类指针来调用派生类中的虚函数,计算出圆柱体、圆锥体的表面积和体积,并在main()中给出测试用例。用C++语言
时间: 2023-08-21 13:05:10 浏览: 191
c++ 形状类Shape(派生出圆类Circle和矩形类Rectangle)
好的,以下是用 C++ 语言实现的程序:
```cpp
#include <iostream>
using namespace std;
// 定义基本形状类 Shape
class Shape {
public:
virtual double GetSurface() = 0; // 求表面积的纯虚函数
virtual double GetVolume() = 0; // 求体积的纯虚函数
};
// 定义圆柱体类 Cylinder,继承自 Shape
class Cylinder : public Shape {
public:
Cylinder(double r, double h) : radius(r), height(h) {}
double GetSurface() { return 2 * 3.14 * radius * radius + 2 * 3.14 * radius * height; }
double GetVolume() { return 3.14 * radius * radius * height; }
private:
double radius;
double height;
};
// 定义圆锥体类 Cone,继承自 Shape
class Cone : public Shape {
public:
Cone(double r, double h) : radius(r), height(h) {}
double GetSurface() { return 3.14 * radius * (radius + sqrt(radius * radius + height * height)); }
double GetVolume() { return 3.14 * radius * radius * height / 3; }
private:
double radius;
double height;
};
// 主函数
int main() {
// 用基类指针分别指向圆柱体和圆锥体
Shape* p1 = new Cylinder(2, 5);
Shape* p2 = new Cone(2, 5);
// 分别调用派生类中的虚函数,计算表面积和体积
cout << "Cylinder surface area: " << p1->GetSurface() << endl;
cout << "Cylinder volume: " << p1->GetVolume() << endl;
cout << "Cone surface area: " << p2->GetSurface() << endl;
cout << "Cone volume: " << p2->GetVolume() << endl;
// 释放内存
delete p1;
delete p2;
return 0;
}
```
这个程序定义了一个基本形状类 Shape,其中包含了求表面积和体积的纯虚函数 GetSurface 和 GetVolume。然后通过该类分别定义了圆柱体类 Cylinder 和圆锥体类 Cone,它们都继承自 Shape 类,并实现了基类中的纯虚函数。在主函数中,用基类指针分别指向圆柱体和圆锥体,通过调用派生类中的虚函数来计算表面积和体积,最后释放内存。
阅读全文