在CPP文件中可以直接定义对象实例吗?解决办法

在CPP文件中可以直接定义对象实例吗?
在VC中新建了一个MFC项目,项目名称为MyAppApp
在该项目的MyApp.cpp文件中,有句话,我有些不理解,下面红色标识的语句,麻烦大家帮忙解释一下,谢谢大家!
#include "stdafx.h"
#include "MyApp.h"
#include "MyAppDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyAppApp

BEGIN_MESSAGE_MAP(CMyAppApp, CWinApp)
//{{AFX_MSG_MAP(CMyAppApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
//    DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyAppApp construction

CMyAppApp::CMyAppApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CMyAppApp object

CMyAppApp theApp;       这句话好奇怪,它不属于类吧,这句话的作用是什么,类中不能直接定义对象实例吧?         
/////////////////////////////////////////////////////////////////////////////
// CMyAppApp initialization

BOOL CMyAppApp::InitInstance()
{
AfxEnableControlContainer();

// Standard initialization
// If you are not using these features and wish to reduce the size
//  of your final executable, you should remove from the following
//  the specific initialization routines you do not need.

#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

CMyAppDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
//  dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
//  dismissed with Cancel
}

// Since the dialog has been closed, return FALSE so that we exit the
//  application, rather than start the application's message pump.
return FALSE;
}

------解决思路----------------------
MFC的奥秘竟然被你找到了,可喜可贺,难道你没发现,整个MFC文档视图框架,Wizard为你定义了APP类,View类。DOC类等,却没有一个对象,应用程序是如何被启动的,今天,你终于找到了,恭喜。
------解决思路----------------------
CMyAppApp theApp; 
这不就是全局变量吗?

theApp在MFC框架中是一个知识点。用框架生成的MFC程序,都有这个变量。

------解决思路----------------------
全局变量

要看清楚哦,它并没有在类里面
------解决思路----------------------
我们常说的“应用程序唯一的实例”,实际上就是通过全局变量来实现的,这个实例对象作为全局变量,在应用程序启动函数入口_tWinMain调用之前进行构造,并在_tWinMain中会获取这个对象指针,然后通过这个指针调用它的InitInstance函数进行应用程序的初始化

你可以在InitInstance函数中打个断点,调试的时候查看堆栈,基本上对于应用程序的启动流程就有个直观的了解了
------解决思路----------------------
楼上几位都是正解
------解决思路----------------------
“CMyAppApp theApp;       这句话好奇怪,它不属于类吧,这句话的作用是什么,类中不能直接定义对象实例吧?”

当 需要 时 可以

extern  CMyAppApp theApp; 
------解决思路----------------------
CMyAppApp theApp;       这句话好奇怪,它不属于类吧,这句话的作用是什么,类中不能直接定义对象实例吧
--------------------------------------------------------------------------------------
你表述的“类中”是啥意思?

这句定义语句写在一个cpp文件当中,是作为全局变量来用的啊。再者,类中为什么不能定义对象实例呢?

class  A
{
public:
     A();
     ~A();
private:
     int    m_nData;
}

class  B
{
public:
     B();
     ~B();
private:
     A   m_ObjectA;
}

------解决思路----------------------
引用:
CMyAppApp theApp; 
这不就是全局变量吗?

theApp在MFC框架中是一个知识点。用框架生成的MFC程序,都有这个变量。

+1

------解决思路----------------------
引用:
Quote: 引用:

全局变量

要看清楚哦,它并没有在类里面

那这个程序运行时,运行的第一句源程序是哪句?


任何应用程序的入口当然是main函数啊(当然Win32 应用程序的入口是类似于main函数的WinMain,在调用WinWain之前还有一系列的函数,比如说mainCRTStartup之类啥的,前面不是跟你说了嘛,你打个断点,执行到断点的地方,查看堆栈的调用情况就一目了然了,不要再那儿瞎猜,自己跟进去看看它的调用顺序才是王道)。

我的意思是,既然整个项目是一个类,那就应该没有定义这个类的实例的地方呀?
----------------------------------------------------------------------------------------------------------------
对于这个问题,我实在不知道该如何回答。请问你C++学多久了?


------解决思路----------------------
"既然整个项目是一个类"

类是什么, 是一个 数据结构 (类似structure), 整个项目 是个 实例。
------解决思路----------------------
引用:
Quote: 引用:

全局变量

要看清楚哦,它并没有在类里面

那这个程序运行时,运行的第一句源程序是哪句?


程序的入口是main()(MFC入口是WinMain),但是运行main之前会先分配全局变量的空间

建议看看  MFC AppWizard的原理与MFC程序框架的剖析
------解决思路----------------------
就是一个全局变量而已!
------解决思路----------------------
cpp中定义一个类的对象没有问题,红字的地方就是定义了一个全局的类对象。
------解决思路----------------------
CMyAppApp theApp; 全局变量,也就是项目启动的时候需要自己实例化,不然app启动不起来,主要还是涉及到WinMain函数
------解决思路----------------------
  extern  CMyAppApp theApp 作用:类中可以直接定义对象实例,当一个类实例化时,这个类中定义的其它类也同时被实例化,表示共用同一个theApp,如果写成 CMyAppApp theApp 表示新建一个CMyAppApp 实例