//CPerson是一个类
CPerson p;定义了一个类的对象,CPerson* p;定义了一个类的对象的指针
请问:
1.上面的说法对吗?
2.为什么前者不能调用protected类型的~Person()(析构函数),而后者却可以?
 3.DECLARE_DYNCREATE(...)是什么意思?什么时候需要用?
4.谢谢!

解决方案 »

  1.   

    CPerson p;定义了一个类的对象,CPerson* p;定义了一个类的对象的指针
    请问:
    1.说法是对的.
    2.为什么前者不能调用protected类型的~Person()(析构函数),而后者却可以?
    不理解.
     3.DECLARE_DYNCREATE(...)是什么意思?什么时候需要用?
    动态创建.
      

  2.   

    2.
    比如创建一个MDI工程,系统生成的文档类的构造函数是protected类型的。然后我在视图类的头文件中定义:
    CXXXMDIDoc* pDoc;//正确
    CXXXMDIDoc pDoc;//出问题了
    error C2248: 'CXXXMDIDoc::CXXXMDIDoc' : cannot access protected member declared in class 'CXXXMDIDoc'
      

  3.   

    CXXXMDIDoc* pDoc;//类指针,还没有对象。当pDoc 真正执行一个对象 的时候,然后显示删除的时候,一样也会错误
    CXXXMDIDoc pDoc;//类真正的对象
      

  4.   

    CXXXMDIDoc pDoc;//出问题了
    这句在声明一个类对象时,编译器会调用构造函数,来构造对象.这时你的构造函数是保护,不能直接访问,所以出错.
    指针则不存在这个问题.因为没有调用构造函数.
    可是如果你NEW的时候一会样会错.