MFC

MFC 클래스의 최상위 클래스 CObject

디버그정 2008. 8. 7. 17:14
MFC 클래스의 최상위 클래스 CObject C/C++/MFC
  몇개의 클래스를 제외하고 MFC의 클래스는 CObject라는 클래스를 상속받는다. 이 클래스는 메모리에 클래스를 설정하는 기능 및 클래스의 기능과 종류를 알수 있는 함수를 가지고 있다.
 
Visual Studio Setup Directory/MFC/Include/AFX.H File
 

#ifdef _AFXDLL

class CObject

#else

class AFX_NOVTABLE CObject

#endif

{

public:

 

// Object model (types, destruction, allocation)

             virtual CRuntimeClass* GetRuntimeClass() const;

             virtual ~CObject();  // virtual destructors are necessary

 

             // Diagnostic allocations

             void* PASCAL operator new(size_t nSize);

             void* PASCAL operator new(size_t, void* p);

             void PASCAL operator delete(void* p);

#if _MSC_VER >= 1200

             void PASCAL operator delete(void* p, void* pPlace);

#endif

 

#if defined(_DEBUG) && !defined(_AFX_NO_DEBUG_CRT)

             // for file name/line number tracking using DEBUG_NEW

             void* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);

#if _MSC_VER >= 1200

             void PASCAL operator delete(void *p, LPCSTR lpszFileName, int nLine);

#endif

#endif

 

             // Disable the copy constructor and assignment by default so you will get

             //   compiler errors instead of unexpected behaviour if you pass objects

             //   by value or assign objects.

protected:

             CObject();

private:

             CObject(const CObject& objectSrc);              // no implementation

             void operator=(const CObject& objectSrc);       // no implementation

 

// Attributes

public:

             BOOL IsSerializable() const;

             BOOL IsKindOf(const CRuntimeClass* pClass) const;

 

// Overridables

             virtual void Serialize(CArchive& ar);

 

#if defined(_DEBUG) || defined(_AFXDLL)

             // Diagnostic Support

             virtual void AssertValid() const;

             virtual void Dump(CDumpContext& dc) const;

#endif

 

// Implementation

public:

             static const AFX_DATA CRuntimeClass classCObject;

#ifdef _AFXDLL

             static CRuntimeClass* PASCAL _GetBaseClass();

#endif

};

 
  간단히 설명하면 CObject는 클래스를 메모리에 할당하기 위한 new 연산자가 오버로딩 되어 있다. MFC 클래를 메모리에 할당하기 위해서는 여러 부가적인 작업들이 필요하다. 왜냐면 각 클래스의 기능에 따라 할당될 메모리가 변화 되기 때문이다. 그외 현재 클래스의 특징과 기능을 할 수 있는 여러 함수가 표함되어 있다.
 
IsSerializable() 함수는 현재 클래스가 데이터를 디스크에 저장할수 있는 기능을 가지고 있는가 없는가를 확인하는 함수
AssertValid() 함수는 현재 클래스가 유효한 클래스인가를 확인하는 클래스
Dump()는 현재 클래스의 상태를 확인할 수 있는 클래스 (디버그시 Dump기능을 이용하여 데이터의 상태를 확인 한다.)
 
  여기까지 설명으로 CObject 클래스는 클래스 자체가 메모리 상에 정확하게 위치하기 위한 기능을 가진다.
사용자 삽입 이미지
  CCmdTarget 클래스는 메시지 전송을 담당하는 클래스
  CWnd 윈도우를 출력하는 클래스
  CWinThread 하나의 윈도 프로그램이 독립적으로 돌아가도록 만들어 놓은 클래스
  CDocument 도큐먼트 클래스
  CWndApp 어플리케이션 클래스
 
윈도 프로그램은 메시지 드리븐(Message Driven) 방식으로 구동된다.
  하나의 모듈이 순서적으로 구동되지 않고 메시지가 발생되면 해당하는 메시지에 의해서 그 모듈이 실행되는 방식으로 구동된다는 것. 예를 들어 키보드에 입력된 키를 화면에 출력한다고 가정했을때, 키보드에서 키가 입력되었다는 것을 WM_KEYDOWN이라는 메시지로 어플리케이션에 전달하고, 어플리케이션은 이 메시지와 함께 전달된 입력 키코드를 메모리에 저장한 다음 다시 자신의 프로그램에 WM_PAINT라는 메시지를 보내고 WM_PAINT 메시지가 들어온 상태에서 화면에 입력된 키보드값을 출력한다.
 
※출저 : 김회율, 이상엽, Visual C++ Programming Bible v6.x, (주)영진출판사

'MFC' 카테고리의 다른 글

강력한 에디터 CRichEditView  (0) 2008.08.30
◎ MFC Class 레퍼런스(한글번역)  (0) 2008.08.30
지킴이 기초 강좌  (1) 2008.08.29
CCmdTarget Class MFC  (1) 2008.08.07
MFC 클래스 계층도  (1) 2008.08.07
DECLARE_DYNCREATE 매크로 풀어쓰기...  (2) 2008.07.30
DECLARE_DYNCREATE와 IMPLEMENT_DYNCREATE  (2) 2008.07.30