成员变量在C++中作为class变量是怎么回事?

Memeber variable as class variable in C++ how does it happen?


我有个问题。我目前正在用 C++ 编写一个小示例,无法弄清楚解释。这是我的问题:

#include <iostream>
using namespace std;

class X{
int& i ;  /* int i; */

public :
X(int k=100):i(k){ }



X(`const` X& x):i(x.i){}
void setI(int k){i=k;}
int getI(){cout <<"adresse: "<< &i << " Contenue: "<<i<<endl ; return i;}
};

int main(){
int i =7;

X a(i);
a.getI();

a.setI(5);

a.getI();

cout << "the value of i is: " << i << endl;

X b(a);
b.getI();
cout << "the value of i is: " << i << endl;

X c;
c.getI();
a.getI();

return 0;
}

So what I dont understand is why does the variable member i in the class X work like a class variable? I have searched online and found that it is called agregation and that it is used for some reasons but I can not understand why does it happen? How does the compiler do that?

Could you please explain this to me.
Thanks in Previous.

您的代码有未定义的行为,它根本不需要以任何方式工作。

问题来了

class X {
    int& i;
public:
    X(int k = 100) : i(k) {}
    ...
};

k 是局部变量,是构造函数的参数。一旦构造函数退出,它就不再存在。

但是您的代码引用了该局部变量。所以你的 class 最终引用了一个不再存在的对象。这是未定义的行为。

PS 我不确定 class 变量与成员变量是什么意思。对我来说,这些术语意味着同一件事。但是无论您看到什么奇怪的行为,都可以通过您的程序具有的未定义行为来解释,如上所述。

PPS 看到class variable 是静态成员变量的意思,有道理,就忽略上一段。