【问题标题】:How can you reference a variable in the default constructor如何在默认构造函数中引用变量
【发布时间】:2011-12-11 07:16:39
【问题描述】:

我有一个简单的类测试:

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;;}

d 这里给出的原始值是 10 而不是 20。为什么会这样以及如何更改构造函数以便能够通过 c 操作 a。

谢谢

【问题讨论】:

  • 这里没有使用默认构造函数。

标签: c++ constructor reference


【解决方案1】:

这不是构造函数的问题,而是成员变量的问题。它是int,这是一个完全不相关的新int。要让它引用某些东西,请使用int&。然后,你也不能有一个默认的构造函数,你必须使用初始化列表:

class test{
public:
    test(int &input):a(input){}
    int& a;
};

【讨论】:

  • 非常感谢。这对于向量类 test{ public: test(vector &input):a(input){} vector & a; 似乎有点棘手};
  • @AElansary:如果矢量或其他任何东西都没有区别,参考就是参考。
【解决方案2】:

成员需要是引用,需要在初始化列表中进行初始化,像这样:

class test{
public:    
    test(int &input)
        :a(input)
    {}    
    int &a;
};

您不能在正文中分配它,因为所有引用都需要初始化。当你到达身体时,已经太晚了,初始化已经发生了。你也不能有你的默认构造函数,因为你必须有一些东西来初始化引用,并且没有参数,这意味着你要么必须使用一个全局的、另一个 int 成员,要么动态地创建一个新的 int(非常糟糕的主意)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多