Frame1中 说main函数调用全局函数AfxGetApp以取得theApp的对象指针
extern CMyWinApp theApp;
CWinApp* AfxGetApp()
{
return theApp.m_pCurrentWinApp;
}
可是调用后明明得到的是指向CWinApp的啊,怎么是指向theApp的指针呢?
一直不明白 求达人分析:)
谢谢

解决方案 »

  1.   

    指向的是theapp的指针,指针是基类类型
    如果调用的是虚函数,则用的是CMyWinApp的版本
      

  2.   

    谢谢楼上的 可是还是不怎么明白啊
    为什么不直接这样呢?
    extern   CMyWinApp   theApp; 
    CMyWinApp*   AfxGetApp() 

    return   theApp.m_pCurrentWinApp; 
      

  3.   

    为什么要把指针定义成基类类型的啊?
    extern       CMyWinApp       theApp;   
    COBject*       AfxGetApp()   
    {   
    return       theApp.m_pCurrentWinApp;   
    }   
    这样的话也是可以的吧  可是为什么要这样啊
    刚看MFC....
      

  4.   

    因为
    AfxGetApp() 应该是基类CWinApp的成员吧
    返回子类的对象指针好吗?
    而且CMyWinApp是根据你建的工程名定的
    如果换了名字,那函数的返回值是否也得跟着换?所以才需要虚函数
      

  5.   

    AfxGetApp()   不是基类CWinApp的成员 
    而且这样返回的是CWinApp对象的指针呀 不是指向CMyWinApp的对象的吧?
    我就是不明白为什么要返回CWinApp对象的指针,为什么不返回CObject对象的指针呢?
      

  6.   

    汗,不好意思,说错了
    AfxGetApp() 不是谁的成员所以更要返回基类的指针了为什么不返回最原始类的指针?
    因为如果返回最原始类的指针,你就只能用 CObject类的 成员了(或者其派生类覆盖   CObject类的成员) 
    而cwinapp必然增加了更多的成员,而你的cmywinapp一般不会比cwinapp多多少当然也可以强制类型转换,不过得明白这个函数是做什么用的,看名字就明白需要得到全局的app对象,也就是theapp,返回CObject很不恰当