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

解决方案 »

  1.   

    :)又看到你了。是这样的,
    在声明了DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE宏的类中,加入了新的成员函数
    static CObject* PASCAL CreateObject();
    其作用在于返回一个该类型的对象
    将指向该函数的函数指针放在了CRuntimeClass结构体中的m_fnCreateObject项中,方便调用而同时在CRuntimeClass中加入了函数
    CObject* CreateObject();
    此函数就调用上面的记录了的函数因为动态生成的时候,程序中只能得到类对应的CRuntimeClass结构体,于是就调用它的CreateObject()函数,相当于是调用注册了的对应类中的静态函数CreateObject(),返回类的一个对象。
      

  2.   

    TO: steel007(小宝)谢谢,有点明白,但是,又不是函数重载,怎么能共用一个函数名呢?(都是CreateObject呢)
      

  3.   

    TO:classrect(以前的号丢了,郁闷) 什么意思?C++里有委托吗?只知道C#里有委托!
    能不能详细说一下!当然如果你懂的话!
      

  4.   

    干吗不可以用同一个名字:
    1.CRuntimeClass.CreateObject()
    2.某个类::CreateObject()
    二者为何不可以同名,作用于都不一样
    相当于两个不同的类,当让可以有同样的成员函数名
      

  5.   

    Up又不是函数重载,怎么能共用一个函数名呢?(都是CreateObject呢)
      

  6.   

    Faint,没看到我的回复么?
    不同的类/结构体当然可以有相同的成员函数名
      

  7.   

    to jyq686(四空) 呵呵,委托是一种思想,不限于特定的语言.
    微软的驱程模型都采用了委托的思想.每一层向下层扔irp,最后把控制硬件功能委托给HAL(硬件抽象层).函数之间的委托.呵呵.算我说话不严谨(没必要上纲上线).函数A调用函数B,我可以说函数A把某某子
    功能委托给函数B.不过分吧不同类之间的函数同名,并且class A的函数只调用了class B中的同名函数.我可以说A某某函数
    委托给b的某某函数.并且c++也可以做委托类. 呵呵,扯远了.