通常,大多数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. 为什么TextElemt类不是从Control类派生的?
- 3. 为什么ObjectContext类不是从某个接口派生的?
- 4. 为什么建议从Python派生Exception而不是BaseException类?
- 5. 为什么MovieClip派生类不会gotoAndStop?
- 6. 为什么Fn是从FnMut派生的(它是从FnOnce派生的)?
- 7. 如何从CFindReplaceDialog派生类? (MFC)
- 8. MFC:一个CFormView派生类
- 9. 为什么UserRolesPartRecord不是从Orchard CMS的ContentPartRecord派生的?
- 10. 为什么HttpContext不是从HttpContextBase派生的?
- 11. 为什么我不能从多个类派生?
- 12. 从QAbstractTableModel派生类中删除行不起作用,为什么?
- 13. 为什么我的派生类是一个抽象类? C++
- 14. 什么是C++深入派生类?
- 15. 为什么派生类继承基类的私有成员?
- 16. '的CObject :: CObject的':不能访问类中声明私有成员 'CObject的'
- 17. 为什么我的派生类不能传递给基类?
- 18. 为什么从两个空类派生的空类的大小是2?
- 19. 为什么子控件不会出现在MFC派生的CWnd中
- 20. 为什么基类私有属性被派生类访问?
- 21. 什么是最左派生?
- 22. 派生类作为模板参数的用途是什么?
- 23. 为什么在派生类中找不到基类成员C++
- 24. 为什么派生类不能引用基类?
- 25. 为什么派生类不能访问基类静态方法?
- 26. 为什么创建从通用列表(.NET)派生的类?
- 27. 为什么我的向量不能识别我的派生类?
- 28. 再次但是没有解决之道:错误C2248:“CObject的:: CObject的”:不能访问类中声明“CObject的”
- 29. static_cast从派生类到基类时会发生什么?
- 30. 为什么Visual Studio的IntelliSense不适用于派生类?