繁体   English   中英

在类成员函数中获取引用,并将其分配给C ++中的类数据成员(引用)

[英]Get a reference in a class member function & assign it to a class data member (reference) in C++

代码下面的WRT,Abc和Xyz是2类。

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

我知道如果不进行初始化,就无法在C ++中声明引用。 但是,如何在C ++中处理这种情况呢?

class Abc
{
public:
    Xyz& mem; //ILLEGAL IN C++
     void DoOperation(Xyz& temp)
     {
        mem = temp;
     }   
     void DOOperation_2()
     {

     }
     DOOperation_3()
     {

     }


};

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

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

正如您正确指出的那样,您需要初始化reference 您也不能在引用初始化后更改其指向的内容

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

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之间的关键区别 指针和参考?


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

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

在构造函数中初始化它:

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

或使用指针:

class Abc
{
public:
    Xyz* mem = nullptr;

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

请改用指针。

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()
     {

     }


};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM