就是在不知道具体的类型的情况下构造一个类,例如对void指针进行强制转换,

解决方案 »

  1.   

    什么叫不知道具体类型,上面的代码是什么意思呢??好像已经定义了CStudent的类型
      

  2.   

    《深入浅出MFC》 可以吗???
     
      

  3.   

    你刚才只是申明了这个类型,而后面在.cpp文件中才是真正的生成这个类的对象
    DECLARE_DYNCREATE()与IMPLEMENT_DYNCREATE()这两个都是动态创建的宏,如果要动态创建一个对象,就要引用着两个宏
    具体的细节看看《深入浅出》吧,讲的应该很透彻的
      

  4.   

    CRuntimeClass在MFC中的作用很重要,因为MFC利用它来进行类的动态确定,即是通过类变量来判定该变量是否为某一类的实例。由于指针的类型是可以转换的,所以时常会出现从A到B的转换导致错误。而在MFC的各种书籍中对CRuntimeClass的介绍是比较少的,在这里总结它的一些用法。1、动态确定类在MFC中CObject::IsKindOf( const CRuntimeClass* pClass ) 利用CRuntimeClass来进行判定,如果你生成的类是以CObject为基础的,你可以使用该成员函数来判定。下面举一个例子来加深了解。class CAge:public CObjectBOOL IsAge(CObject* pO){ return pO->IsKindOf( RUNTIME_CLASS( CAge ) );}BOOL IsAge2(CAge* pO){ return pO->IsKindOf( RUNTIME_CLASS( CAge ) );}void main(void){ CObject a; CAge b; IsAge(&a);//return FALSE IsAge(&b);//return TRUE IsAge2((CAge*)&a);//return FALSE,避免强制转换带来的错误}
    2、生成类CObject CRuntimeClass::CreateObject(void)可以产生一个类变量。作用和new类似,但在某些特殊场合有独特的作用。下面举一个例子来加深了解。
    假定有以下几个类定义class CWndA: public CWndclass CWndB: public CWndfunction1(){ CRuntimeClass* pC=RUNTIME_CLASS( CWndA ); CreateWnd(pC);}CWnd* CreateWnd(CRuntimeClass* pClass){ return (CWnd*)pClass->CreateObject();}
    在上面例子中,CreateWnd返回的是CWnd* 其实它是一个CWndA*。你可以进行由父类到子类的强制转换而不必要担心出错。使用CRuntimeClass可以代替使用switch生产类实例的一些繁琐。(请好好想想它的用途,当你发现它的好处时,你一定会大吃一惊,M$使用宏来实现类的动态检测,如果谁有兴趣可以去看看MFC的源代码。)注意:在类的定义中使用IMPLEMENT_DYNCREATE后方可生效。
     
     
     
      

  5.   

    其实很容易理解,就是new一个对象吗,这也是mfc的一个非常重要的一个功能。比如说,你的程序通过网络放一个对象给另外一个程序,其中对象通过网络转换成数据,当然,你希望接收到是一个对象,并且不需要自己去硬编码创建一个对象(硬编码当然可以,如果传输的对象是种类是很多的,那你的代码将会很多,而且,但每添加一种对象是,还要必须重新修改代码),因此出现了动态创建,根据一点信息,就可以创造出不同的对象了,也就是CRuntimeClass::CreateObject()函数,只要是声明为可以动态创建的东西,都可以通过这个函数创建对象。另外,动态创建也用在对象的序列化中。《深入浅出MFC》这本书非常深入的告诉你怎样实现这种功能和怎样使用,也是本书的几个精彩的地方啊。 
      

  6.   

    哈哈,看什么书啊,直接把MFC的源代码翻出来看看不就行了吗.
      

  7.   

    你可以把那两个宏展开,他是用一个静态成员实现的,具体我忘了。你可以自己看MFC源码
      

  8.   

    高手:可以搞定这个!!!
    http://www.csdn.net/Expert/topic/470/470143.shtm