在类成员函数中获得参考&将它分配给C ++中的类数据成员(引用)

时间:2017-07-11 12:55:05

标签: c++ c++11 pointers reference pass-by-reference

WRT代码,Abc& Xyz是2个班级。

我在DoOperation(Xyz& temp)中得到一个引用,并希望将它分配给类数据成员即mem1,以便其他成员函数lile DOOperation_2(),DOOperation_3()等可以使用此引用。 / p>

我知道我们不能在没有初始化的情况下在C ++中声明引用。但是我如何在C ++中处理这样的场景呢?

executor.execute(runnable);

4 个答案:

答案 0 :(得分:1)

很简单:使用指针。与引用不同,指针是可分配的。

class Abc
{
public:
     Xyz* mem1;
     void DoOperation(Xyz& temp)
     {
        mem1 = &temp;
     }   
};

答案 1 :(得分:1)

正如您所正确指出的,您需要初始化参考。你也无法在初始化后改变引用“指向”的内容

所以这里的简单解决方案就是使用指针

class Abc {
public:
    Xyz* mem1{nullptr};
    void DoOperation(Xyz* ptr) {
        mem1 = ptr;
    }
};

然后你可以在这样的方法中使用mem1(带有一个很好的assert

void Abc::SomeMethod() {
    assert(this->mem1);
    mem1->something();
}

请注意,引用与T* const(const指针)非常相似。在这个答案Difference between const. pointer and reference?

中很好地概述了关键差异

如果您绝对必须使用引用,那么您唯一能做的就是在初始化期间初始化构造函数中的引用。

class Abc {
public:
    Xyz& mem1;
    Abc(Xyz& mem1_in) : mem1{mem1_in} {}
};

答案 2 :(得分:1)

在构造函数中初始化它:

class Abc
{
public:
    Xyz& mem1;
     Abc (xYZ& temp) : mem1(temp) {} 
// ...
};

或使用指针:

class Abc
{
public:
    Xyz* mem = nullptr;

    void DoOperation(xYZ& temp)
    {
        mem = &temp;
    }
// ...
};

答案 3 :(得分:1)

改为使用指针。

class Abc
{
public:
     Xyz* mem1; // pointer
     void DoOperation(xYZ& temp)
     {
        mem1 = &temp; // take the address of the variable and save it to the pointer
     }   
     void DOOperation_2()
     {

     }
     DOOperation_3()
     {

     }


};