为什么对象切片不发生在私有继承中?在这种情况下,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继承对象覆盖其他继承对象
显示一些代码。将派生类型的对象转换为基本类型的对象将对该对象进行分片。这就是切片的意思。 –