#include<iostream>
using namespace std;
CMyWinApp *theApp;
class CWinApp
{
public:
CWinApp* m_pCurrentWinApp;
CWinApp(){m_pCurrentWinApp=this;}
};
CWinApp* AfxGetApp()
{
return theApp.m_pCurrentWinApp;
}
class CMyWinApp:public CWinApp
{
};
int main()
{
CWinApp* pApp=AfxGetApp();
return 0;
}
从main开始 pApp=AfxGetApp();
AfxGetApp 就一个返回值return theApp.m_pCurrentWinApp
因为theApp是CMyWinApp对象指针
CMyWinApp 是CWinApp的派生类
又因为m_pCurrentWinApp 是CWinApp 的public 权限
public是公共函数 任何类都可以访问,派生类当然就能访问了
回到return theApp.m_pCurrentWinApp
这里因为返回一个CWinApp对象指针 会导致调用m_pCurrentWinApp对象的构造函数就到了
CWinApp(){m_pCurrentWinApp=this;}这个位置
所以this 指针是指向调用成员函数的对象指针theApp
这里相当于m_pCurrentWinApp=theApp
那么theApp是派生类指针 里面成员包含派生类和基类两部分
这里是把theAp的基类部分赋值到m_pCurrentWinApp指针
最后记住,全局对象的构造函数是在进入main之前就进行了