如何将带参数的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
相关产品推荐
相关产品推荐

