下列Shape类是一个表示形状的类,类内的成员函数volume为求立体图形体积的函数,成员函数show为显示立体图形信息的函数。total则是一个普通的用以求不同立体图形的体积总和的函数。 class Shape // 形状类 {public: virtual double volume( ){cout<<”图形体积”<<endl;} // 虚函数 virtual void show( ){cout<<”输出图形信息”<<endl;} // 虚函数 }; double total(Shape *s[], int n) { …… } 要求: (1)从Shape类派生立方体类(Cube)、球类(Sphere),并给出具体的求体积函数和显示图形信息的函数。 (2)写出total函数的函数体。 (3)主函数里面建立若干派生类对象,并调用total函数求不同派生类对象的体积和。
时间: 2024-03-03 10:47:20 浏览: 70
下面是题目要求的答案:
(1)从Shape类派生立方体类(Cube)、球类(Sphere),并给出具体的求体积函数和显示图形信息的函数。
```c++
class Cube : public Shape {
private:
double edge; // 立方体边长
public:
Cube(double e) : edge(e) {}
virtual double volume() {
return edge * edge * edge;
}
virtual void show() {
cout << "立方体,边长为:" << edge << endl;
}
};
class Sphere : public Shape {
private:
double radius; // 球体半径
public:
Sphere(double r) : radius(r) {}
virtual double volume() {
return 4.0 / 3.0 * 3.1415926 * radius * radius * radius;
}
virtual void show() {
cout << "球体,半径为:" << radius << endl;
}
};
```
(2)写出total函数的函数体。
```c++
double total(Shape *s[], int n) {
double sum = 0.0;
for (int i = 0; i < n; i++) {
sum += s[i]->volume();
}
return sum;
}
```
(3)主函数里面建立若干派生类对象,并调用total函数求不同派生类对象的体积和。
```c++
int main() {
Shape *shapes[2];
shapes[0] = new Cube(3.0);
shapes[1] = new Sphere(2.0);
cout << "不同派生类对象的体积和为:" << total(shapes, 2) << endl;
return 0;
}
```
输出结果为:
```
图形体积
图形体积
不同派生类对象的体积和为:33.5103
```