鱼C论坛

 找回密码
 立即注册
查看: 767|回复: 1

[已解决]重写派生类矩形、圆形、圆的面积函数和周长函数

[复制链接]
发表于 2023-12-21 21:20:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1)重写派生类矩形、圆形、圆的面积函数和周长函数;

2)重写派生类球体、圆柱体、圆锥体的面积函数和体积函数。

3)实现一个静态类,该静态类用于分别计算图形数组的面积、周长和体积之和。



主函数中的输出语句改为如下语句:

cout << "Sum of Area: " << sum_of_area << "\nSum of Perimeter: " << sum_of_perimeter << "\nSum of Volume: " << sum_of_volume << endl;



这题C++代码怎么写
最佳答案
2023-12-21 21:20:45
以下是根据您提供的问题描述所编写的代码:
#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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-21 21:20:45 | 显示全部楼层    本楼为最佳答案   
以下是根据您提供的问题描述所编写的代码:
#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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 06:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表