我正在尝试制作一个相当基本的程序,但是我得到了一些非常不一致的输出。特别是,setter似乎并没有在设置值,尽管当我以不应该改变输出的方式弄乱参数变量时,有时我会得到工作结果。
这是我的代码:
public:
point()
{
x = 0;
y = 0;
}
point(double x, double y)
{
x = x;
y = y;
}
void set_x(double x)
{
x = x;
}
void set_y(double y)
{
y = y;
}
double get_x() const
{
return x;
}
double get_y() const
{
return y;
}
private:
double x;
double y;
};
point pointA;
double x,y;
cout << "Enter x value for point A: " << endl;
cin >> x;
pointA.set_x(x);
cout << "Enter y value for point A: " << endl;
cin >> y;
pointA.set_y(y);
point pointB(x,y);
cout << "X value for point A is: " << pointA.get_x() << endl;
cout << "Y value for point A is: " << pointA.get_y() << endl;
cout << "X value for point B is: " << pointB.get_x() << endl;
cout << "Y value for point B is: " << pointB.get_y() << endl;
X value for point A is: 10
Y value for point A is: 10
X value for point B is: 3.18463e-314
Y value for point B is: 2.12199e-314
我对所有这一切感到非常困惑,因为本质上相同的功能在其他类似的基本程序中也起作用。如果有人能指出我犯的明显错误,将不胜感激。
答案 0 :(得分:5)
让我们研究一个构造函数,尽管到处都是同样的问题
point(double x, double y)
{
x = x;
y = y;
}
x
是指参数。因此,您要为其分配参数。可能有两种解决方案:
this
即this->x = x;
明确命名成员。point(double x, double y) : x(x), y(y) {}
。这里有关于在初始化程序内部和外部引用x
的特殊规则。我建议即使您采用上述解决方案之一,也要使用成员初始化器列表。这是更惯用的C ++。答案 1 :(得分:0)
问题-正如其他人已经提到的-您的成员变量的名称与参数的名称相同。
单独看一下此方法。它已完成,并且确实为自己分配了x
。
void set_x(double x)
{
x = x;
}
在您的代码中,此double x
隐藏了外部变量(从函数的角度来看)x
。
我建议给您的成员变量加上m_
或m
的前缀(成员为m)。
这将使名称唯一,并有助于您区分和防止此类问题。
void set_x(double x)
{
m_x = x;
}
现在您可以看到参数x
已分配给成员变量m_x
。
或者,您也可以使用this-Pointer来引用具有相同名称的成员:
void set_x(double x)
{
this->x = x;
}