在下面顯示的代碼示例中 - 在Container類中,它擁有(并負責銷毀)兩個物件c, d,它們是抽象類的子類B。Container物件可以ObjectDisplay在其建構式中創建新的接受一種 B 的物件。我可以將抽象型別 B 作為指標傳遞到ObjectDisplay并將其存盤為RAW 指標。但是存盤和使用原始指標并始終檢查它是否為空指標并不理想。如果 B 不是抽象類,我可以將它ObjectDisplay作為參考傳遞(即。ObjectDisplay (B& b))。但是由于我無法更改 B,我想知道將 B* 物件作為原始指標存盤在中的替代方法是ObjectDisplay什么?
// B is abstract
class B
{
public:
virtual int getDefault() = 0;
};
class C : public B
{
public:
int getDefault() override { return 1; }
};
class D : public B
{
public:
int getDefault() override { return 5; }
};
class ObjectDisplay
{
public:
ObjectDisplay (B* b) : object (b) {}
void someFunction()
{
const auto result = b->getDefault();
// do something
}
private:
B* object;
};
class Container
{
public:
void addDisplay()
{
displays.push_back (ObjectDisplay (&c));
displays.push_back (ObjectDisplay (&d));
}
private:
C c;
D d;
std::vector<ObjectDisplay> displays;
};
uj5u.com熱心網友回復:
如果 B 不是抽象類,我可以將它作為參考傳遞給 ObjectDisplay
不,如果B是一個抽象類,你仍然可以通過參考傳遞它。B& object可以系結到B的子類的實體。它的行為幾乎與指標相同。
正如cppref中所參考的:
也就是說,如果派生類是使用指標或對基類的參考來處理的,則對被覆寫的虛函式的呼叫將呼叫派生類中定義的行為。
B&宣告in的成員ObjectDisplay并通過參考構造它。
class ObjectDisplay
{
public:
ObjectDisplay (B& b) : object (b) {}
private:
B& object;
};
class Container
{
public:
void addDisplay()
{
displays.push_back (ObjectDisplay (c));
displays.push_back (ObjectDisplay (d));
}
};
見在線演示
旁白:由于您傳遞的是ObjectDisplay直接在 中構造的臨時物件push_back,因此我建議您使用emplace_back.
void addDisplay()
{
displays.emplace_back (c);
displays.emplace_back (d);
}
uj5u.com熱心網友回復:
如果
B不是抽象類,我可以將它ObjectDisplay作為參考傳遞(即。ObjectDisplay (B& b))。但既然我不能改變B,我想知道B* object作為原始指標存盤的替代方法是ObjectDisplay什么?
僅僅因為B是一個抽象類并不意味著您需要傳遞它并將其存盤為指標。您也可以傳遞它并將其存盤為參考。多型性適用于指標和參考。并且使用參考確實可以解決您的nullptr問題,例如:
class ObjectDisplay
{
public:
ObjectDisplay (B& b) : object (b) {}
void someFunction()
{
const auto result = object.getDefault();
// do something
}
private:
B& object;
};
class Container
{
public:
void addDisplay()
{
displays.push_back (ObjectDisplay (c));
displays.push_back (ObjectDisplay (d));
}
private:
C c;
D d;
std::vector<ObjectDisplay> displays;
};
在線演示
只要c并且d超過 中的ObjectDisplay物件displays,無論您使用指標還是參考,您都會很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/467519.html
上一篇:C 中1[指標]的含義?[復制]
