簡體   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