qq_56429174 2021-04-04 00:16 采纳率: 0%
浏览 18

大佬们,这个怎么做呀(・o・) 设计一个CGISPoint类 包含: float x, y; 完成相

大佬们,这个怎么做呀(・o・) 设计一个CGISPoint类 包含: float x, y; 完成相应的构造,拷贝构造,赋值等函数接口 设计一个GIS目标的类 CGISOBJ,包含三个成员变量: 1)目标名称 使用char [32]; 或string 2)点坐标数组 CGISPoint *m_points; 3)点数 int numPoints; 表示 m_points 指针的有效点数; 完成相应的构造函数,拷贝构造函数, 赋值函数等; 成员函数:CGISPoint GetGCenter(); //一个求GIS目标的重心 在main()中定义CGISOBJ的对象,初始化,然后调用求GIS目标的重心函数,输出结果。
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-07-19 08:51
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    首先我们可以设计CGISPoint类,包含两个成员变量float x, y表示点的坐标,然后完成相应的构造函数、拷贝构造函数、赋值函数等,以及一个计算重心的函数GetGCenter(),具体代码如下:
    class CGISPoint{
    public:
        float x;
        float y;
        
        CGISPoint(float x_val, float y_val): x(x_val), y(y_val){}
        
        CGISPoint(const CGISPoint& other): x(other.x), y(other.y){}
        
        CGISPoint& operator=(const CGISPoint& other){
            if(this != &other){
                x = other.x;
                y = other.y;
            }
            return *this;
        }
        
        CGISPoint GetGCenter(){
            return CGISPoint(x, y);  //此处简化计算重心的方式,即重心为点本身
        }
    };
    

    接着我们设计CGISOBJ类,包含三个成员变量:目标名称(char数组或string)、点坐标数组(CGISPoint指针)、点数。完成相应的构造函数、拷贝构造函数、赋值函数等。同时我们添加一个成员函数GetGCenter()用于计算GIS目标的重心,代码如下:

    class CGISOBJ{
    public:
        char name[32];
        CGISPoint* m_points;
        int numPoints;
        
        CGISOBJ(const char* n, CGISPoint* p, int num): numPoints(num){
            strcpy(name, n);
            m_points = new CGISPoint[numPoints];
            for(int i = 0; i < numPoints; i++){
                m_points[i] = p[i];
            }
        }
        
        CGISOBJ(const CGISOBJ& other): numPoints(other.numPoints){
            strcpy(name, other.name);
            m_points = new CGISPoint[numPoints];
            for(int i = 0; i < numPoints; i++){
                m_points[i] = other.m_points[i];
            }
        }
        
        CGISOBJ& operator=(const CGISOBJ& other){
            if(this != &other){
                numPoints = other.numPoints;
                strcpy(name, other.name);
                
                delete[] m_points;
                m_points = new CGISPoint[numPoints];
                for(int i = 0; i < numPoints; i++){
                    m_points[i] = other.m_points[i];
                }
            }
            return *this;
        }
        
        CGISPoint GetGCenter(){
            float sum_x = 0.0, sum_y = 0.0;
            for(int i = 0; i < numPoints; i++){
                sum_x += m_points[i].x;
                sum_y += m_points[i].y;
            }
            float center_x = sum_x / numPoints;
            float center_y = sum_y / numPoints;
            return CGISPoint(center_x, center_y);
        }
        
        ~CGISOBJ(){
            delete[] m_points;
        }
    };
    

    最后在main函数中定义一个CGISOBJ的对象,初始化,然后调用GetGCenter()函数计算GIS目标的重心,并输出结果,代码如下:

    int main(){
        CGISPoint points[3] = {CGISPoint(1.0, 2.0), CGISPoint(3.0, 4.0), CGISPoint(5.0, 6.0)};
        CGISOBJ obj("Target1", points, 3);
        
        CGISPoint center = obj.GetGCenter();
        cout << "The center of the GIS object is: (" << center.x << ", " << center.y << ")" << endl;
        
        return 0;
    }
    
    评论

报告相同问题?