计算几种不同的三维图形的表面积和体积,这里定义一个抽象类Cshape,将其成员函数显示基本图形信息函数DispAttr()、计算表面积函数Sarea()、计算体积函数Volume()定义为虚函数。根据此抽象类派生出球体、正方体、长方体和圆柱体,并分别重新实现基类中的纯虚函数来显示输出计算结果。
时间: 2024-03-16 21:44:23 浏览: 123
好的,这是一个涉及抽象类和多态的问题,我来给您讲解一下。
首先,我们需要定义一个抽象类 `Cshape`,它包含三个虚函数 `DispAttr()`、`Sarea()`、`Volume()`,分别用于显示基本图形信息、计算表面积、计算体积。这些函数都是纯虚函数,因为我们无法在基类中给出这些函数的具体实现,需要在派生类中重新实现。
```c++
class Cshape {
public:
virtual void DispAttr() = 0;
virtual double Sarea() = 0;
virtual double Volume() = 0;
};
```
然后,我们可以根据 `Cshape` 派生出具体的图形类,如球体、正方体、长方体和圆柱体。这些类都需要重新实现基类中的三个虚函数,以计算出具体的表面积和体积。
以球体为例,我们可以定义一个 `CSphere` 类,它继承自 `Cshape`,并重新实现了 `DispAttr()`、`Sarea()`、`Volume()` 函数。在这些函数中,我们使用球体的半径 `r` 计算出表面积和体积。
```c++
class CSphere : public Cshape {
public:
CSphere(double r) : m_radius(r) {}
virtual void DispAttr() {
std::cout << "Sphere, Radius = " << m_radius << std::endl;
}
virtual double Sarea() {
return 4.0 * M_PI * m_radius * m_radius;
}
virtual double Volume() {
return 4.0 / 3.0 * M_PI * m_radius * m_radius * m_radius;
}
private:
double m_radius;
};
```
其他图形的类的实现方式类似,只需要根据具体的公式计算出表面积和体积即可。
最后,我们可以在主函数中创建这些图形的对象,并通过调用虚函数 `DispAttr()`、`Sarea()`、`Volume()` 来显示图形信息、计算表面积和体积。由于这些函数是虚函数,因此它们会根据对象的实际类型来调用相应的函数。
```c++
int main() {
Cshape* shapes[4];
shapes[0] = new CSphere(3.0);
shapes[1] = new CCube(2.0);
shapes[2] = new CRectangle(2.0, 3.0, 4.0);
shapes[3] = new CCylinder(2.0, 4.0);
for (int i = 0; i < 4; i++) {
shapes[i]->DispAttr();
std::cout << "Surface Area = " << shapes[i]->Sarea() << std::endl;
std::cout << "Volume = " << shapes[i]->Volume() << std::endl;
std::cout << std::endl;
}
for (int i = 0; i < 4; i++) {
delete shapes[i];
}
return 0;
}
```
以上就是这个问题的答案,希望能帮到您!
阅读全文