成员变量在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 是静态成员变量的意思,有道理,就忽略上一段。
我有个问题。我目前正在用 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 是静态成员变量的意思,有道理,就忽略上一段。