[英]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.