用c++写一个程序,定义抽象基类Container,由它派生出3个派生类:Shape、Cylinder、Cube。用虚函数分别计算几种图形的表面积和体积。
时间: 2024-03-15 10:45:46 浏览: 79
设计基类点类(Point)、直接派生类圆类(Circle)、间接派生类圆柱体类(Cylinder),将求面积的函数(area)声明成虚函数,并在主函数实现虚函数
好的,以下是一个示例代码:
```c++
#include <iostream>
using namespace std;
class Container { // 抽象基类
public:
virtual double getSurfaceArea() const = 0; // 纯虚函数
virtual double getVolume() const = 0; // 纯虚函数
};
class Shape : public Container { // 派生类1
public:
virtual double getSurfaceArea() const { // 计算形状的表面积
return 0.0; // 具体实现省略
}
virtual double getVolume() const { // 计算形状的体积
return 0.0; // 具体实现省略
}
};
class Cylinder : public Container { // 派生类2
private:
double radius, height;
public:
Cylinder(double r, double h) : radius(r), height(h) {}
virtual double getSurfaceArea() const { // 计算圆柱体的表面积
return 2 * 3.14 * radius * height + 2 * 3.14 * radius * radius;
}
virtual double getVolume() const { // 计算圆柱体的体积
return 3.14 * radius * radius * height;
}
};
class Cube : public Container { // 派生类3
private:
double sideLength;
public:
Cube(double s) : sideLength(s) {}
virtual double getSurfaceArea() const { // 计算立方体的表面积
return 6 * sideLength * sideLength;
}
virtual double getVolume() const { // 计算立方体的体积
return sideLength * sideLength * sideLength;
}
};
int main() {
Container* container1 = new Cylinder(1.0, 2.0);
Container* container2 = new Cube(3.0);
cout << "Cylinder surface area: " << container1->getSurfaceArea() << endl;
cout << "Cylinder volume: " << container1->getVolume() << endl;
cout << "Cube surface area: " << container2->getSurfaceArea() << endl;
cout << "Cube volume: " << container2->getVolume() << endl;
delete container1;
delete container2;
return 0;
}
```
在这个程序中,我们定义了一个抽象基类`Container`,它包含了两个纯虚函数`getSurfaceArea()`和`getVolume()`,分别用于计算容器的表面积和体积。然后我们从`Container`派生出了三个派生类:
- `Shape`,表示一般的形状,它的`getSurfaceArea()`和`getVolume()`函数都返回0,因为我们无法计算它的表面积和体积。
- `Cylinder`,表示圆柱体,它有一个构造函数用于初始化圆柱体的半径和高度,并且它重写了基类中的`getSurfaceArea()`和`getVolume()`函数,分别计算圆柱体的表面积和体积。
- `Cube`,表示立方体,它有一个构造函数用于初始化立方体的边长,并且它也重写了基类中的`getSurfaceArea()`和`getVolume()`函数,分别计算立方体的表面积和体积。
在`main()`函数中,我们创建了一个圆柱体和一个立方体的对象,并且通过基类指针调用它们的`getSurfaceArea()`和`getVolume()`函数,可以看到它们都能正确地计算出表面积和体积。最后我们释放了这两个对象的内存。
阅读全文