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;这就是全部。