具有类构造函数和类成员变量的意外输出值

时间:2019-01-21 12:52:25

标签: c++

我需要了解为什么x(x + 1)仅在退出构造函数后才发生。

class A
{
protected:
    int x;

public:
    A(int x = 5) : x(x + 1)
    {
        cout << "In A::A x=" << x << endl;
    }

    operator int() const { return x; }
};

void main()
{
     A a1(10);
     cout << a1 << endl ;
}

我当时想我会得到:

In A:: An x=11
11

但是我莫名其妙地得到了

In A:: An x=10
11  

2 个答案:

答案 0 :(得分:4)

您有两个名为path.to.your.package.ServerKt的变量。

在构造函数的主体内,参数变量将阴影成员变量。每当您在构造函数主体中使用x时,它将是参数而不是成员。

要使用成员变量,您需要从对象中显式获取它,例如x

一般提示:嵌套作用域中的符号不​​要使用相同的名称。除了解决此问题外,还将使代码更易于阅读和理解。

答案 1 :(得分:1)

您的参数隐藏了同名的成员变量-您的定义等同于

curl -X POST -H "Content-Type: application/json" --data '{"name":"test6"}' http://<xxxx>:<yyyy>/test

当参数与成员具有相同的名称时,您需要使用class A { protected: int y; public: A(int x = 5) : y(x + 1) { cout << "In A::A x=" << x << endl; } operator int() const { return y; } }; 显式引用该成员。
(初始化程序列表遵循其自己的规则。)