楼主大三了。。最近在看mfc。。你问俺为啥看mfc?因为楼主大二的时候没看懂留下了心病。。现在旧病复发了。。看到动态创建时迷糊了。。其实是看到后面动态创建的使用时迷糊了。。不明有一。。mfc为什么要用到动态创建呢?动态创建函数的功能是根据类名得到一个对象。。这种意境我体会不了。。实现什么会要根据类名得到对象呢?书本有一句说把对象数据从文件中取出用以实例化对象的时候用到。。好吧。。体会不了。。所以上来请教了。。

解决方案 »

  1.   

    把对象数据从文件中取出用以实例化对象?貌似指的是MFC中的串行化机制CArchive
      

  2.   

    看起来永久保存与本节主题动态保存似乎没有什么干连。有。你把你的数据存储到文件上,这些数据通常是对象中的成员变量,我把它读出来之后,势必要依据文件上的记载,从新new出那些个对象来,问题在于,即使我的程序中有这些类的定义(就算我的程序和你的程序有一样的内容好了),我能够这么做吗?
    char classname【30】=getclassname();//从文件中获得一个类名称
    CObject* obj=new classname //这一行行不通这是书中的原文,其实这个还是能看懂。。他的意思是保存对象的时候保存一个类名,再写一个判断类名的函数,通过判断类名之后new一个对象。。以前我们存文件也经常这样做。。只是不以类名做生成对象的标志。。我不懂的是为啥cmyview这些类在生成框架时也要用这个。。
      

  3.   

    比如你有一个文件,保存的是绘图数据,有线条,有矩形,有圆形。以前的方式,每种类型图形数据保存一个标记,读取文件的时候程序中根据这个标记去绘制相关图形。现在不是对象化么,那么每种图形类型由一个类表示,每个类去实现自己的绘制功能,读取文件的时候就要根据这个标记去创建相应类型的对象。问题来了,我们都知道创建对象是这样:
    ClassA a();
    ClassB *b = new ClassB();
    也就是必须在编程阶段就知道类型,在读取文件的时候当然也可以根据标记逐个比较(if/else或者switch/case)创建不同类型的对象。但是这样不灵活,我增加一种图形类型就必须在文件读取、保存的地方增加相应代码,也就是硬编码。利用动态创建对象,或者叫RTTI,就是把这个判断对象类型然后去创建时间对象的工作交给程序自己而不是程序员去做,你增加新的类型,不需要修改文件读写代码,只要新的类型符合RTTI声明要求,程序中包含了这个类的实现代码,就实现了存什么类行的对象,读取就生成什么类型的对象。更进一步,我可以把图形类型做成dll等,完全不用修改原程序就可以增加新的图形类型,实现插件或者更新升级的功能。