为什么我的增幅器功能没有设置任何内容?还是我的构造函数?

时间:2018-09-13 11:32:50

标签: c++ getter-setter

我正在尝试制作一个相当基本的程序,但是我得到了一些非常不一致的输出。特别是,setter似乎并没有在设置值,尽管当我以不应该改变输出的方式弄乱参数变量时,有时我会得到工作结果。

这是我的代码:

point.cpp

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

我对所有这一切感到非常困惑,因为本质上相同的功能在其他类似的基本程序中也起作用。如果有人能指出我犯的明显错误,将不胜感激。

2 个答案:

答案 0 :(得分:5)

让我们研究一个构造函数,尽管到处都是同样的问题

point(double x, double y)
{
    x = x;
    y = y;
}

x是指参数。因此,您要为其分配参数。可能有两种解决方案:

  1. 为成员和参数使用不同的名称。
  2. thisthis->x = x;明确命名成员。
  3. 仅适用于c'tor。使用成员初始化器列表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;
}