爲什麼對象切片不發生在私有繼承中?在這種情況下,Static_cast會產生錯誤? 我明白,私有繼承不會在其繼承類之間保持「是 - 一種」關係。這是否與切片有關,因爲派生不是基類型的,因此編譯器強制不進行隱式轉換?私有繼承中的對象切片
回答
將派生類切片到其私有基類沒有任何意義。只要考慮一下「私人」的含義。這意味着外部世界不應該關心它。允許切片(鑄造)到私人基地意味着外部世界將會關心。
如果你真的想這樣的行爲(我很想聽聽你的理由),你可以破解它周圍:
class Base { };
struct Derived : private Base
{
Base asBase() { return static_cast<Base>(*this); }
};
這樣,投偏偏內源性,在基地進行訪問。您從static_cast獲得的錯誤是因爲它在Derived的範圍之外使用,其中Base無法訪問。
我想我明白你想說什麼......還有一件事,謝謝你展示了獲得基指針的方式,但它真的需要嗎? –
我沒有展示如何獲得Base _pointer_。 'asBase'函數將Derived對象分割爲一個Base(注意,asBase的返回值是'Base',而不是'Base *'或'Base&',它們都不會分割對象)。總的來說,切片不能從Derived的範圍之外完成,因爲Base是一個私有基礎。這就是爲什麼你需要在Derived範圍內發生切片。希望這可以澄清事情。 – thelamb
好的..現在我明白了你的觀點,謝謝... –
- 1. 切片在繼承的對象
- 2. JavaScript中的私有繼承
- 3. C#中的私有繼承?
- 4. 私有成員的繼承
- 5. 繼承的對象
- 6. JavaScript中的對象繼承
- 7. 私有變量繼承
- 8. 繼承和私有成員
- 9. 繼承和私有變量
- 10. 私有繼承或遏制
- 11. 繼承和私有方法
- 12. C++ - defenition - 私有繼承
- 13. 私有繼承和交換
- 14. 私有繼承VS遏制
- 15. 組成了私有繼承
- 16. 私有繼承和派生對象到基礎引用
- 17. JavaScript中的私有靜態和繼承
- 18. 對象繼承嗎?
- 19. 繼承ActiveRecord對象
- 20. Javascript對象繼承
- 21. 類,對象,繼承?
- 22. Javascript對象繼承
- 23. 繼承JavaScript對象
- 24. C#對象繼承
- 25. 對象切片,有利嗎?
- 26. 對象切片有用嗎?
- 27. 公開從基類繼承,從派生的類私有繼承
- 28. 使用父對象中的私有變量實現原型繼承
- 29. 具有屬性的JS對象繼承
- 30. JavaScript繼承對象覆蓋其他繼承對象
顯示一些代碼。將派生類型的對象轉換爲基本類型的對象將對該對象進行分片。這就是切片的意思。 –