《深入浅出MFC》之动态创建问题!

jyq686 2004-08-17 10:37:39
动态创建中结构体CRuntimeClass比类型识别多了两个成员。
其中一个是CObject* CreateObject();成员
但在DECLARE_DYNCREATE(class_name)宏定义中又有一个函数,原型为:
static CObject* PASCAL CreateObject();
函数名都相同,它们两有什么关系吗?怎么能申明成同一个函数名呢?

不解........................谢谢!
...全文
133 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
steel007 2004-08-18
  • 打赏
  • 举报
回复
Faint,没看到我的回复么?
不同的类/结构体当然可以有相同的成员函数名
jyq686 2004-08-18
  • 打赏
  • 举报
回复
Up

又不是函数重载,怎么能共用一个函数名呢?(都是CreateObject呢)
steel007 2004-08-18
  • 打赏
  • 举报
回复
干吗不可以用同一个名字:
1.CRuntimeClass.CreateObject()
2.某个类::CreateObject()
二者为何不可以同名,作用于都不一样
相当于两个不同的类,当让可以有同样的成员函数名
jyq686 2004-08-18
  • 打赏
  • 举报
回复
TO:classrect(以前的号丢了,郁闷)

什么意思?C++里有委托吗?只知道C#里有委托!
能不能详细说一下!当然如果你懂的话!
classrect 2004-08-18
  • 打赏
  • 举报
回复
函数之间的委托
jyq686 2004-08-18
  • 打赏
  • 举报
回复
TO: steel007(小宝)

谢谢,有点明白,但是,又不是函数重载,怎么能共用一个函数名呢?(都是CreateObject呢)
classrect 2004-08-18
  • 打赏
  • 举报
回复
to jyq686(四空)

呵呵,委托是一种思想,不限于特定的语言.
微软的驱程模型都采用了委托的思想.每一层向下层扔irp,最后把控制硬件功能委托给HAL(硬件抽象层).

函数之间的委托.呵呵.算我说话不严谨(没必要上纲上线).函数A调用函数B,我可以说函数A把某某子
功能委托给函数B.不过分吧

不同类之间的函数同名,并且class A的函数只调用了class B中的同名函数.我可以说A某某函数
委托给b的某某函数.

并且c++也可以做委托类. 呵呵,扯远了.


steel007 2004-08-17
  • 打赏
  • 举报
回复
汗~~
说得好乱,也不知道表达清楚了没有~
steel007 2004-08-17
  • 打赏
  • 举报
回复
:)又看到你了。

是这样的,
在声明了DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE宏的类中,加入了新的成员函数
static CObject* PASCAL CreateObject();
其作用在于返回一个该类型的对象
将指向该函数的函数指针放在了CRuntimeClass结构体中的m_fnCreateObject项中,方便调用

而同时在CRuntimeClass中加入了函数
CObject* CreateObject();
此函数就调用上面的记录了的函数

因为动态生成的时候,程序中只能得到类对应的CRuntimeClass结构体,于是就调用它的CreateObject()函数,相当于是调用注册了的对应类中的静态函数CreateObject(),返回类的一个对象。

16,551

社区成员

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

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

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