当我们在声明变量类型时,为什么C ++中的构造函数的行为会有所不同?

时间:2018-10-15 20:19:46

标签: c++ class constructor

所以我在Point类上创建了一个构造函数。

课程

class Point {
public:
    Point(); //declare default constructor
    double x;
    double y;
};

构造函数

Point::Point()  {
  x=0.0;
  y=0.0;
}

现在,当我在main中打印x和y的默认值时,它们显示为0和0,这是我期望的。

但是,只是为了好玩,将构造函数的声明更改为以下内容-

新构造函数声明

Point::Point()  {
  double x=0.0;
  double y=0.0;
}

现在,当我调用相同的构造函数时,得到的x和y的值分别为2.16703e-314和6.95313e-310。现在,我知道了构造函数的用途。我想知道的是,当我声明一个构造函数开始像那样将变量类型添加到x和y时会发生什么?希望问题清楚。很高兴澄清它是否不是。

2 个答案:

答案 0 :(得分:6)

在C ++中,您可以“阴影”变量。当您“阴影”一个变量时,您将在“外部”范围内创建一个与名称相同的新变量。现在,该名称指的是内部变量,任何更改都不会反映在外部变量中。

具有适当警告设置的编译器会告诉您何时进行此操作。

Point::Point()  {
  double x=0.0;
  double y=0.0;
}

此处,xy遮盖了Point::xPoint::y成员变量。因此,x=0.0不会更改x中的Point

答案 1 :(得分:0)

第一种情况

=INDEX('State Labor Force'!$D:$D,MATCH($H$79&$G80&$B$78,'State Labor Force'!$E:$E,0))

第二种情况

Point::Point() {
  x=0.0;  // refers to class member variable x 
  y=0.0;  // refers to class member variable y
}

评论解释了每种情况下发生的情况。 因此,在第二种情况下,当您尝试访问类成员变量时,当您创建一个与类成员变量同名的局部变量时,就会得到垃圾值(与类成员变量相比,内存位置不同)。