通常,大多数MFC(基于窗口的类)都是从CObject派生而来的。 CObject做什么? 为什么一些MFC类不需要从CObject派生?为什么有些MFC类不是从CObject派生的?
2
A
回答
4
根据MSDNCObject
主要提供以下功能:
- 支持串行
- 运行时类信息
- 对象诊断输出
- 与集合类兼容性
所以当这些都不需要,不需要去来自CObject
。
从CObject
派生出来的时候会涉及到一些开销(DECLARE/IMPLEMENENT_SERIAL/DYNAMIC
宏),因此可能会有比从CObject
派生更简单的方法。
3
MFC文档涵盖了这一点。 CObject的文档描述了它的功能(序列化支持,运行时类信息等)。
Hierarchy Chart是一个很好的概述,并显示哪些类不是从CObject派生的。
您可以得出结论:不从CObject派生的类是那些不需要它提供的服务的类。原因很多:例如像CFileTime这样的类是一种简单的数据类型。
相关问题
- 1. 为什么委托类型是从MulticastDelegate类派生的,为什么不直接从委托类派生?
- 2. 为什么ObjectContext类不是从某个接口派生的?
- 3. 为什么MovieClip派生类不会gotoAndStop?
- 4. 如何从CFindReplaceDialog派生类? (MFC)
- 5. MFC:一个CFormView派生类
- 6. 为什么UserRolesPartRecord不是从Orchard CMS的ContentPartRecord派生的?
- 7. 为什么HttpContext不是从HttpContextBase派生的?
- 8. 从QAbstractTableModel派生类中删除行不起作用,为什么?
- 9. 为什么我不能从多个类派生?
- 10. 为什么我的派生类是一个抽象类? C++
- 11. 为什么派生类继承基类的私有成员?
- 12. '的CObject :: CObject的':不能访问类中声明私有成员 'CObject的'
- 13. 为什么从两个空类派生的空类的大小是2?
- 14. 为什么基类私有属性被派生类访问?
- 15. 什么是最左派生?
- 16. 为什么派生类不能引用基类?
- 17. 为什么创建从通用列表(.NET)派生的类?
- 18. 派生类作为模板参数的用途是什么?
- 19. 为什么我的向量不能识别我的派生类?
- 20. 为什么GetType()在显式地将派生类派生到基类后返回派生类?
- 21. 为什么我无法从System.Enum抽象类派生?
- 22. 为什么Qt在基类中寻找我的插槽而不是派生的?
- 23. 定义派生类时,为什么基类标记为“公共”?
- 24. 为什么我们不能序列化从接口派生的具体类?
- 25. 为什么使用派生类的基类指针
- 26. 在某些派生类中实现虚函数的正确方法是什么?
- 27. VS2013编译器:'CObject :: CObject':无法访问类'CObject'中声明的私有成员
- 28. 错误C2248:'CObject :: CObject':无法访问在'CObject'类中声明的私有成员
- 29. Eclipse中的派生文件是什么?
- 30. 为什么一个Struct不能从另一个结构派生?