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

C++: Change value of class by method of another class - bug?

本文关键字:错误 方法 另一个 C++      更新时间:2023-10-16

我有一件奇怪的事情,根据我的经验,我可以在C++中调用错误。当我调用此程序时:

#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();
}

输出为:

1
0
1
2

我确实希望能够更改我的类的内部成员的值,例如 bar 类中 foo对象的值。当我更改柱构造函数中的 a.a 值时,看起来我只更改了局部变量。这个过程的机制是什么?C++ 不会将其类中的变量视为常量参数,因为我也可以获取由方法更改的计数器。但是,当计数器更深一个级别时,结构似乎崩溃了。

在构造函数主体中,参数名称隐藏成员名称,因此正如您推测的那样,您正在修改函数参数a,而不是成员a

如果

不想重命名任一变量,可以将成员引用为 this->abar::a 以消除歧义。