我有一个简单的课堂测试:
class test{
public:
test(){};
test(int &input){a=input;};
~test (){};
int a;
};
鉴于构造函数参数是通过引用调用的,我原本以为我能够从calss外部操作引用成员,但事实并非如此:
int _tmain(int argc, _TCHAR* argv[]){
int c=10;
test t1(c);
c=20;
int d=t1.a;;}
这里给出的原始值为10而不是20.为什么会出现这种情况,如何更改构造函数以便能够通过c进行操作。
感谢你
答案 0 :(得分:4)
这不是构造函数的问题,而是成员变量的问题。它是int
,这是一个完全不相关的新int
。要让它引用某些内容,请使用int&
。然后,您也没有默认构造函数,您必须使用初始化列表:
class test{
public:
test(int &input):a(input){}
int& a;
};
答案 1 :(得分:2)
该成员需要是一个引用,您需要在初始化列表中初始化它,如下所示:
class test{
public:
test(int &input)
:a(input)
{}
int &a;
};
您无法在正文中分配它,因为所有引用都需要初始化。当你到达身体时,为时已晚,初始化已经发生。你也不能拥有你的默认构造函数,因为你必须有一些东西来初始化引用,没有参数,这意味着你要么必须使用全局,另一个int成员,要么创建一个new int动态(非常糟糕的主意)。