重写派生类矩形、圆形、圆的面积函数和周长函数
1)重写派生类矩形、圆形、圆的面积函数和周长函数;2)重写派生类球体、圆柱体、圆锥体的面积函数和体积函数。
3)实现一个静态类,该静态类用于分别计算图形数组的面积、周长和体积之和。
主函数中的输出语句改为如下语句:
cout << "Sum of Area: " << sum_of_area << "\nSum of Perimeter: " << sum_of_perimeter << "\nSum of Volume: " << sum_of_volume << endl;
这题C++代码怎么写 以下是根据您提供的问题描述所编写的代码:
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
class Shape {
public:
virtual double getArea() = 0;
virtual double getPerimeter() = 0;
};
class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() {
return width * height;
}
double getPerimeter() {
return 2 * (width + height);
}
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() {
return M_PI * pow(radius, 2);
}
double getPerimeter() {
return 2 * M_PI * radius;
}
};
class Cylinder : public Circle {
private:
double height;
public:
Cylinder(double r, double h) : Circle(r), height(h) {}
double getArea() {
return 2 * M_PI * pow(radius, 2) + 2 * M_PI * radius * height;
}
double getVolume() {
return M_PI * pow(radius, 2) * height;
}
};
class Cone : public Circle {
private:
double height;
public:
Cone(double r, double h) : Circle(r), height(h) {}
double getArea() {
return M_PI * pow(radius, 2) + M_PI * radius * sqrt(pow(radius, 2) + pow(height, 2));
}
double getVolume() {
return M_PI * pow(radius, 2) * height / 3;
}
};
class Sphere : public Circle {
public:
Sphere(double r) : Circle(r) {}
double getArea() {
return 4 * M_PI * pow(radius, 2);
}
double getVolume() {
return 4 * M_PI * pow(radius, 3) / 3;
}
};
class StaticCalculator {
public:
static double calculateTotalArea(vector<Shape*> shapes) {
double totalArea = 0;
for (Shape* shape : shapes) {
totalArea += shape->getArea();
}
return totalArea;
}
static double calculateTotalPerimeter(vector<Shape*> shapes) {
double totalPerimeter = 0;
for (Shape* shape : shapes) {
totalPerimeter += shape->getPerimeter();
}
return totalPerimeter;
}
static double calculateTotalVolume(vector<Shape*> shapes) {
double totalVolume = 0;
for (Shape* shape : shapes) {
if (dynamic_cast<Cylinder*>(shape)) {
totalVolume += dynamic_cast<Cylinder*>(shape)->getVolume();
} else if (dynamic_cast<Cone*>(shape)) {
totalVolume += dynamic_cast<Cone*>(shape)->getVolume();
} else if (dynamic_cast<Sphere*>(shape)) {
totalVolume += dynamic_cast<Sphere*>(shape)->getVolume();
}
}
return totalVolume;
}
};
int main() {
Shape* rectangle = new Rectangle(4, 5);
Shape* circle = new Circle(3);
Shape* sphere = new Sphere(2);
Shape* cylinder = new Cylinder(2, 5);
Shape* cone = new Cone(3, 4);
vector<Shape*> shapes;
shapes.push_back(rectangle);
shapes.push_back(circle);
shapes.push_back(sphere);
shapes.push_back(cylinder);
shapes.push_back(cone);
cout << "Total area: " << StaticCalculator::calculateTotalArea(shapes) << endl;
cout << "Total perimeter: " << StaticCalculator::calculateTotalPerimeter(shapes) << endl;
cout << "Total volume: " << StaticCalculator::calculateTotalVolume(shapes) << endl;
delete rectangle;
delete circle;
delete sphere;
delete cylinder;
delete cone;
return 0;
}
代码中定义了抽象基类`Shape`,以及派生类`Rectangle`、`Circle`、`Cylinder`、`Cone`和`Sphere`。每个类都重写了基类中的面积和周长(对于立体图形还有体积)的计算函数。例如,`Rectangle`类重写了`getArea`和`getPerimeter`函数,分别计算矩形的面积和周长。`Cylinder`类和`Cone`类实现了立体图形的计算函数,即重写了基类`Circle`的`getArea`函数,同时还增加了一个新的函数`getVolume`,用于计算体积。
在`StaticCalculator`类中,定义了静态成员函数`calculateTotalArea`、`calculateTotalPerimeter`和`calculateTotalVolume`,用于计算图形数组的总面积、总周长和总体积。这些静态函数遍历图形数组,通过多态性调用每个图形对象的相应函数,并将结果累加到总值中。
在主函数中,创建了一些不同类型的图形对象,并将它们加入到一个图形数组中。然后使用`StaticCalculator`类的静态函数计算并输出图形数组的总面积、总周长和总体积。
请注意,为了避免内存泄漏,需要在不再使用对象时手动释放内存,即调用`delete`操作符来销毁动态分配的对象。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]