You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带参数的struct构造函数作为参数传入Circle类构造函数

C++ 结构体参数传入类构造函数的正确实现

原有代码的错误点

  • Circle类构造函数的第一个参数声明错误:Circle(Point pt(int ox, int oy), int raza) 实际是声明了一个参数为函数指针的写法,不符合传入Point实例的需求
  • 初始化列表无法直接对成员对象的内部属性赋值:obj.x(ox), obj.y(oy) 是非法写法,必须整体调用Point的构造函数初始化obj成员
  • main函数中创建Circle实例的写法错误,无需在参数里重复声明变量类型

正确实现代码(两种可选方案)

方案1:Circle构造函数直接接收Point实例

struct Point{
    int x, y;
    Point(){}
    Point(int ox, int oy) : x(ox),y(oy){}
};

class Circle{
    public:
    Point obj;
    int radius;
    // 参数直接接收Point类型的实例,用const引用避免拷贝开销
    Circle(const Point& pt, int raza) : obj(pt), radius(raza) {}
};

int main()
{
    // 方式1:先构造Point实例再传入
    Point p(2,3);
    Circle c1(p,3);
    // 方式2:直接传入匿名Point对象
    Circle c2(Point(2,3),3);
    return 0;
}

方案2:Circle构造函数接收坐标参数,内部构造Point

如果不想在外部提前构造Point,可以直接把x、y坐标传给Circle构造函数,内部完成Point的初始化:

struct Point{
    int x, y;
    Point(){}
    Point(int ox, int oy) : x(ox),y(oy){}
};

class Circle{
    public:
    Point obj;
    int radius;
    // 直接接收x、y坐标,初始化列表调用Point的带参构造
    Circle(int ox, int oy, int raza) : obj(ox, oy), radius(raza) {}
};

int main()
{
    Circle c(2,3,3);
    return 0;
}

内容的提问来源于stack exchange,提问作者Gabi5537

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:42:01