关于《深入浅出MFC》的问题之二, 菜鸟求助

ren20 2001-02-13 12:42:00
在第98页,上面的图,关于5个类的链表关系,

我知道 m_pBaseClass是每个类的基类,

例如: 左上第2个,CCmdTarget的基类
是CObject,(m_pBaseClass箭头指向CObject)


但是 m_pNextClass指的是什么? 书上说是下一个接点的地址。

我知道m_pNextClass 指向一个类的地址,但这两个类的关系是什么?
我说的关系是在MFC 中的。

我看的有点糊涂。请高手帮我理顺一下关系。谢谢
...全文
2415 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobofu 2001-02-19
  • 打赏
  • 举报
回复
attention
virtualmfc 2001-02-19
  • 打赏
  • 举报
回复
这个问题太简单了,使用m_pNextClass是为了能够遍历链表,m_pBaseClass是为了进行继承关系判断,要理解这个问题,请学习数据结构。并理解RTTI。
lzhljylg 2001-02-17
  • 打赏
  • 举报
回复
www.huachu.com.cn华储网上电脑书店有卖,只要68元,我下午去邮局汇款
gogocat 2001-02-14
  • 打赏
  • 举报
回复
首先更正你的一个小错误,书中所画的并非5个类的连接关系,它画的是5个类的CRuntimeClass的关系,为了形成一个链表关系,在每个成员中必须有一个指向下一个成员的指针,这就是你所说的m_pNextClass,m_pBaseClass是指向在MFC中的父类的CRuntimeClass结构的指针。

哎,实在难以表达,我可以给你打个比方
例如:用您的家谱来说,毫无疑问,你的CRuntimeClass结构中的m_pBaseClass一定指向您父亲大人的CRuntimeClass结构,你兄弟的也是如此。当然,你可以想象的更大。你家的家谱的Root是您家对应的那位受人尊敬的猴大大。

好,你可以看到,你和你兄弟的CRuntimeClass中的m_pBaseClass都指向你父亲的CRuntimeClass结构。也就是说,不同的CRuntimeClass中的m_pBaseClass可能一样。

那么为了一种目的,我们可以将家谱中的CRuntimeClass结构按另外的关系组织一下,比如我们要查找你家所有上过高中的人,为此我们把你家中所有上过高中的人的CRuntimeClass用一个链表连接起来,这就是m_pNextClass的用意,比方说,你的 m_pNextClass可能指向你兄弟,你兄弟的可能指向你四叔,你四叔的m_pNextClass又可能指向你小妹....,就是说在这个关系链中,没有哪一个的CRuntimeClass会是一样的,这一点与m_pBaseClass完全不同。有了这个链表,我就可以很方便的查找你家上过高中的人。
(以上例子完全虚构,如有雷同,实属巧合)
您问的问题也是如此,我们用m_pBaseClass来记录MFC的层次关系,
而用m_pNextClass来记录有某种特性的元素的下一个,以便将具备这种特性的成员连接起来,
在MFC中微软将具有动态生成特性的类用一个链穿起来,而这个指针就是m_pNextClass。
以上就是对你问题的回答,满意就给分。
ren20 2001-02-14
  • 打赏
  • 举报
回复
gogocat
“我们用m_pBaseClass来记录MFC的层次关系,
而用m_pNextClass来记录有某种特性的元素的下一个,以便将具备这种特性的成员连接起来,
在MFC中微软将具有动态生成特性的类用一个链穿起来,而这个指针就是m_pNextClass。”
这段话使我的疑团顿解,非常感谢。
这里送您 100分。
请gogocat到下面的连接领取另外50分
http://www.csdn.net/expert/TopicView.asp?id=68953


UltraUnAsm
送您50分


http://www.csdn.net/expert/TopicView.asp?id=68953
jingang 2001-02-14
  • 打赏
  • 举报
回复
yuanhl78 2001-02-14
  • 打赏
  • 举报
回复
请问哪儿有《深入浅出MFC》第二版买?
yuanhl78 2001-02-14
  • 打赏
  • 举报
回复
请问哪儿有《深入浅出MFC》第二版买?
Miken 2001-02-14
  • 打赏
  • 举报
回复
介绍个朋友帮我解决ADO的问题,拜托
UltraUnAsm 2001-02-14
  • 打赏
  • 举报
回复
gogocat的回答很棒!很生动!
我稍微补充一点:
这里的m_pNextClass所串接的顺序,是不一定的(因为C++并没有规定Translation unit间file scope object的初始化顺序)。
MFC中微软将具有动态生成特性的类用一个链穿起来,基本上是采用一个chain of responsibility设计模式。


jiangzhizar 2001-02-13
  • 打赏
  • 举报
回复
迷茫~~~~~~~~~~~~~~~~

我改名叫松岛菜菜鸟。

原闻其详
ren20 2001-02-13
  • 打赏
  • 举报
回复
书店 都有卖的呀!
ren20 2001-02-13
  • 打赏
  • 举报
回复
!!!
sunriselx 2001-02-13
  • 打赏
  • 举报
回复
哥们,书在哪里买到的?是第二版?指点一下
Ferchis 2001-02-13
  • 打赏
  • 举报
回复
我手头没有这本书 如果没记错的话 你说的那幅图上的每个东东是一个 CRuntimeClass

每一个CRuntimeClass的变量表示了一个类(如CWinapp,CFrameWnd)(需要一个宏才会被
链入这个表中.那个宏应该是Declare_dyacrate之类的东东,记不清了)

在程序入口 winmain 执行之前,这个链表就会形成 . m_pNextClass指向的是在当前CRuntimeClass变量表示的类链入链表后下一个链入链表的类所对应的CRuntimeClass变量
(有点拗口)

从这个链表就可以知道这个程序中所有具有动态创建特性的类了
wyzegg 2001-02-13
  • 打赏
  • 举报
回复
在第98页,上面的图,关于5个类的链表关系,

我知道 m_pBaseClass是每个类的基类,

例如: 左上第2个,CCmdTarget的基类
是CObject,(m_pBaseClass箭头指向CObject)


但是 m_pNextClass指的是什么? 书上说是下一个接点的地址。

我知道m_pNextClass 指向一个类的地址,但这两个类的关系是什么?
我说的关系是在MFC 中的。

我看的有点糊涂。请高手帮我理顺一下关系。谢谢
大概只是逻辑关系吧。MFC和C++的中不是一样的吗。他们根本不是一个可比的概念

ren20 2001-02-13
  • 打赏
  • 举报
回复
高手请帮助。
xcex 2001-02-13
  • 打赏
  • 举报
回复
???
ren20 2001-02-13
  • 打赏
  • 举报
回复
!
ookaiii 2001-02-13
  • 打赏
  • 举报
回复
我想是这样的,如有错误请指正:

CRuntimeClass为了形成雷库之间的网络关系如:基类,下一个类别的类型(就是你所说的m_pNextClass,当然所指向的结构是CRuntimeClass),这些类的对象出现在内存中的关系就如同书上所示,为了要把这些对象全部穿起来,所以自然CRuntimeClass就有了NextClass指针,书上还说:为了正确CObject的CRuntimeClass的结构是经过特殊处理的,详细请你参看mfc源代码中关于CObject中的声明(当然是没有宏的!)
加载更多回复(1)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧