C++:通过另一个类的方法更改类的值 - bug?

Che*_*Cat -3 c++

我有奇怪的事情,据我的经验,我可以在C++中调用bug.当我打电话给这个节目时:

#include <iostream>
using namespace std;

class foo {
public:
    int a;
    foo(int a = 0) : a(a) {}
} a1;

class bar {
    foo a;
public:
    bar(foo a = a1) : a(a) {
        a.a = 1;
        cout << a.a << endl;
    }
    void print_a() {
        cout << a.a << endl;
    }
};

int main() {
    bar zz;
    zz.print_a();
    a1.a = 2;
    bar zz1;
    zz1.print_a();
}
Run Code Online (Sandbox Code Playgroud)

输出是:

1
0
1
2
Run Code Online (Sandbox Code Playgroud)

我也希望能够改变我的类的内部成员的价值观,就像一个对象的值FOO类内部酒吧类.当我在bar构造函数中更改aa值时,看起来我只更改了局部变量.这个过程的机制是什么?C++不会将其类中的变量视为常量参数,因为我也可以获取由方法更改的计数器.但当反击是一个更深层次的阶级时,结构似乎崩溃了.

Mik*_*our 7

在构造函数体中,参数名称隐藏了成员名称,因此当您推测时,您正在修改函数参数a,而不是成员a.

如果您不想重命名任何一个变量,可以将该成员称为this->abar::a消除歧义.