铸造完成与多态行为概念之间是否存在关联?铸造完成与多态行为概念之间是否存在关联
回答
具体到C++,铸造,有时使用这样的:
void TestFunction(BaseClass* base_class_object)
{
DerivedClass* d = dynamic_cast<DerivedClass*>(base_class_object);
d->method();
}
假设BaseClass
被声明为多态的(即,它有一个virtual
方法),dynamic_cast
将正确施放base_class_object
如果它指向完整的DerivedClass
对象。 IIRC,否则它将返回一个空指针。因此,在运行期间,您可以动态确定一个对象的类型,并在“铸造”的帮助下用它做更多的事情。
更新 -
托尼的响应,并阿尔斯的评论,既很好地补充我的回应,并提供一个更全面的了解。
除了上面的内容以专门回答Q,dynamic_cast仅适用于多态类,而static_cast可以适用于非多态类,所以这就是关系。 – 2010-11-04 10:16:09
在C++中,对象可以从多个基类继承,在这种情况下,对象内部通常会有一个独立连续的内存区域,它遵循每个基本的内存布局。如果派生对象用作期望基类的函数的参数,则编译器可以轻松地将指针/引用传递给“基类”子组件。 static_cast和dynamic_cast类似地根据转换类型选择要指向的特定部分,尽管dynamic_cast进一步执行并对cast的有效性执行有限的运行时验证,如果给定指向不同的指针返回0所派生的类。 reinterpret强制类型在给定指向派生对象的指针时没有任何特殊的支持来查找特定的基础对象,并且不会调整或验证指针。总而言之,可以肯定地说C++的一些Cast和多态特性需要协同工作。
- 1. 多态概念
- 2. 两个大概不相关的类之间的Java铸造
- 3. 选民是否存在优先概念?
- 4. 是否存在构建脚本依赖关系的概念?
- 5. 重载多态概念或?
- 6. 你称之为动态数据定义的概念是什么?
- 7. 结构之间的铸造?
- 8. 多层概念
- 9. 存储过程概念是否存在于核心数据中?
- 10. 虚拟内存是否存在没有Paging概念?
- 11. objective c 2.0 - 关键字铸造与非关键字铸造
- 12. 关于RDBMS概念
- 13. Java多态性铸造
- 14. 是否子对象铸造来回父类之间
- 15. jquery成功概念
- 16. “不”关键字的概念含义;在对象之间进行评估
- 17. 基本概念:在两个视图之间进行通信?
- 18. 在记录Level.INFO和Level.DEBUG之间的概念区别是什么
- 19. GWT缓存概念
- 20. 多态关联是否必要?
- 21. 多态性:运行时间铸造指针
- 22. Ansible动态库存服务概念
- 23. 数据模型概念之间的关系
- 24. 多线程概念
- 25. Hadoop与MongoDB概念
- 26. 与缩小概念
- 27. C型铸造和功能铸造之间有什么区别?
- 28. jQuery,JavaScript自动完成的概念,但不是
- 29. 静态和动态之间的区别铸造
- 30. 这是否违反了概念完整性?
在Java,C++,ActionScript 3或C(顺便说一下,它不支持继承)?每种语言的答案都可能不同。 – 2010-11-04 04:28:08