C++ 特定构造函数和其中字段的初始化

C++ 特定构造函数和其中字段的初始化,c++,class,C++,Class,因此,我需要创建一个类Point,它表示二维空间中的点,它必须有两个double类型的字段,表示x和y坐标,然后我需要创建一个构造函数,它执行以下操作: 它需要启用两个坐标的初始化,启用从类型double到x坐标(其中y设置为零)的隐式转换,并且需要将点初始化到坐标系的原点 我就是这样尝试的: class Point { double x, y; public: Point(double xx) : x(xx), y(0) { x = 0;

因此,我需要创建一个类
Point
,它表示二维空间中的点,它必须有两个double类型的字段,表示x和y坐标,然后我需要创建一个构造函数,它执行以下操作:

它需要启用两个坐标的初始化,启用从类型double到x坐标(其中y设置为零)的隐式转换,并且需要将点初始化到坐标系的原点

我就是这样尝试的:

class Point
{
    double x, y;
public:
    Point(double xx) : x(xx), y(0)
    {
        x = 0;
        y = 0;
    }

};
但我不知道这是否是它需要做的

如果它说构造函数需要初始化两个坐标,这意味着我需要为它们设置值,我实际上不需要向构造函数发送任何参数,但是,为了使隐式强制转换成为可能,我需要发送double并将其分配给x坐标。所以我的问题是: 这是正确的吗?若否,原因为何?感谢您的帮助

点(双xx):x(xx),y(0)
您已经在初始化成员
x
y
(冒号后面的部分称为初始化列表)。既然已经这样做了,就不需要在函数体中重新分配这些成员。此外,在您编写的内容中,
xx
的值被忽略,因为您立即用
x=0
覆盖
x


从您所说的,听起来您需要多个构造函数
Point(void)
Point(double x)
,和
Point(double x,double y)
。另一种方法是使用默认参数
Point(双x=0,双y=0)
,但我发现前者更透明

为什么要更改
x
的值并在
y
中重写相同的值?像这样的非显式构造函数是错误的()您拥有的初始化列表将初始化
x
xx
的值,将
y
的值初始化为
0
。然后在构造函数主体内部,将值
0
分配给
x
(将其值从
xx
更改为
0
),并将值
0
分配给
y
(由于
y
已经是
0
),而
x=0
y=0
是错误的。摆脱他们。其余部分看起来是正确的,但您可能还需要一个默认构造函数,将两者初始化为零。仅供参考,您尝试的概念被称为转换构造函数,应该小心处理,因为它可能会通过隐藏意外和/或不希望的转换而导致一些奇怪的逻辑错误。@WhozCraig好吧,这就是问题所在,我需要创建一个构造函数,隐式地将double转换为x坐标,并将点设置为origin@cdummie这不是问题;这就是您所拥有的(减少了删除刚刚正确初始化的
x
值的错误,以及初始化
y
后不必要的赋值)。我只是说,除非您的代码打算通过从单个
double
表达式转换构造
Point
对象,否则菜单上也可能会有一个默认的ctor;这就是全部。