假設我有一個基類指針數組。 我可以在這個數組中存儲派生類對象指針(從該基類派生)嗎?我能以相反的方式做到嗎?派生對象指針可以存儲在基類指針數組中嗎?
-1
A
回答
4
我可以在這個數組中存儲派生類對象指針(派生自該基類)嗎?
是的。
我可以用相反的方法嗎?
號
假設你有:
struct Base
{
};
struct Derived1 : Base
{
};
struct Derived2 : Base
{
};
std::vector<Derived1*> ptrs;
Base* bPtr = new Derived2;
ptrs.push_back(bPtr); // Not allowed.
// If it were, imagine the problems.
// You have a Derived2* in the guise of a Derived1*
+0
即使派生類具有額外的公共功能,也能做到這一點嗎? – Akra
+1
你可以。但是,您無法通過基類指針訪問派生類成員。要訪問派生類成員,您必須先將指針轉回到派生類指針。 –
3
你的確可以存儲Derived*
在Base*
陣列(或Base
指針該問題的任何其他數據結構)。
但是反之亦然,因爲它違反Liskov Substitution Principle。
相關問題
- 1. 指向派生類對象的基類指針可以訪問在派生類中聲明的新成員嗎?
- 2. 使用派生類對象數組初始化基類指針
- 3. 通過指針到基類的指針到派生類對象操作對象
- 4. 派生類的基指針
- 5. C++派生類的劇組成員指針到基類指針
- 6. 將指針基類轉換爲指向派生類的指針
- 7. C++ dynamic_cast基類指向派生類指針的指針
- 8. 在目標c中指派派生類的基類指針
- 9. 指向派生類對象的基指針的值
- 10. 指向基類數組的指針,使用派生類填充
- 11. 無法從指針轉換爲基類指針指向派生
- 12. 如何派生類指針可以調用基類函數
- 13. 在std :: map中存儲指向派生類實例的指針
- 14. 將基類指針轉換爲未知的派生類指針
- 15. 派生類和基類之間指針指針的轉換?
- 16. 何時使用派生類指針和基類指針
- 17. C++ - 基類指針,方法指針,引用派生類,方法?
- 18. 將指針轉換爲基礎對象轉換爲派生類的指針
- 19. 我不能從指針指向派生類的指針和指向基類的指針嗎?
- 20. 基指針中的派生對象如何調用基函數?
- 21. 使用基類指針到派生類對象
- 22. 試圖派生類對象的地址賦給基類指針
- 23. C++從派生類指針獲取基類對象?
- 24. 如何停止分配派生類對象的基類指針
- 25. 派生類指針指向的函數
- 26. 修改基於對象的對象,但返回指向派生類的指針
- 27. 通過基指針獲取派生類?
- 28. 將指針或指針數組存儲在動態數組中
- 29. 如果繼承類型受保護,我可以使基類的指針指向派生對象嗎?
- 30. 可以將派生類的指針類型轉換爲其基類的指針嗎?
爲什麼不通過提供一些代碼使它成爲一個實際問題? – user463035818
因爲這是大學考試的理論問題,沒有提供任何代碼。 – Akra
是的,你可以在'std :: vector '中存儲'Derived *',但反之亦然。 –
ArchbishopOfBanterbury