下列Shape类是一个表示形状的抽象类,类内的成员函数volume为求立体图形体积的函数,成员函数show为显示立体图形信息的函数。total则是一个普通的用以求不同立体图形的体积总和的函数。 class Shape // 抽象形状类 {public: virtual double volume( )=0; // 纯虚函数 virtual void show( )=0; // 纯虚函数 }; double total(Shape *s[], int n){ …… } 要求: (1)从Shape类派生立方体类(Cube)、球类(Sphere),并给出具体的求体积函数和显示图形信息的函数。 (2)写出total函数的函数体
时间: 2024-02-28 07:57:12 浏览: 66
以下是题目要求的程序:
```cpp
#include <iostream>
using namespace std;
class Shape {
public:
virtual double volume() = 0;
virtual void show() = 0;
};
class Cube : public Shape {
private:
double length;
public:
Cube(double l) : length(l) {}
double volume() {
return length * length * length;
}
void show() {
cout << "Cube: length=" << length << endl;
}
};
class Sphere : public Shape {
private:
double radius;
public:
Sphere(double r) : radius(r) {}
double volume() {
return 4.0 / 3.0 * 3.14159 * radius * radius * radius;
}
void show() {
cout << "Sphere: radius=" << radius << endl;
}
};
double total(Shape* s[], int n) {
double sum = 0.0;
for (int i = 0; i < n; i++) {
sum += s[i]->volume();
}
return sum;
}
int main() {
Shape* s[2];
s[0] = new Cube(10);
s[1] = new Sphere(5);
for (int i = 0; i < 2; i++) {
s[i]->show();
cout << "Volume: " << s[i]->volume() << endl;
}
cout << "Total volume: " << total(s, 2) << endl;
return 0;
}
```
该程序中,Shape类是一个抽象类,包含了纯虚函数volume和show,这两个函数没有实现,只负责定义接口。Cube和Sphere类分别继承自Shape类,实现了volume和show函数,用于计算体积和显示图形信息。
total函数是一个普通函数,它接受一个Shape类型的指针数组和一个整数n作为参数,用于计算这些图形的体积总和。在total函数中,使用循环遍历指针数组,调用每个元素的volume函数,将返回值累加到总和中,并最终返回总和。
在main函数中,创建了两个Shape类型的指针,分别指向一个Cube对象和一个Sphere对象。然后,遍历了这两个指针,分别调用它们的show和volume函数,展示了它们的信息和体积。最后,调用total函数计算它们的体积总和,并输出结果。
阅读全文