如何在默认构造函数中引用变量

时间:2011-12-10 22:49:14

标签: c++ constructor reference

我有一个简单的课堂测试:

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进行操作。

感谢你

2 个答案:

答案 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动态(非常糟糕的主意)。