티스토리 뷰
CObject 서비스
1. 실행시간 클래스 정보
프로그램 실행 중 객체 정보를 알아낸다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
class CMyClass : CObject
{
DECLARE_DYNAMIC(CMyClass) // 클래스명
...
};
#include "MyClass,h"
IMPLEMENT_DYNAMIC(CMyClass, CObject) // 클래스명, 부모클래스
BOOL IsMyClass(CObect* pObj)
{
if (pObj->IsKindOf(RUNTIME_CLASS(CMyClass)))
{
... // pObj 객체가 CMyClass 타입인지 검사
}
} |
cs |
2. 동적 객체 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
class CMyClass : CObject
{
DECLARE_DYNCREATE(CMyClass) // 클래스명
public:
CMyClass(); // 기본 생성자 반드시 있어야 함
...
};
#include "MyClass,h"
IMPLEMENT_DYNACREATE(CMyClass, CObject) // 클래스명, 부모클래스
// 객체를 동적으로 생성
CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CMyClass);
CObject* pObj = pRuntimeClass->CreateObject();
... |
cs |
3. 직렬화
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
class CMyClass : CObject
{
DECLARE_SERIAL(CMyClass) // 클래스명
public:
CMyClass(); // 기본 생성자 반드시 있어야 함
virtual void Serialize(CArchive& ar); // 가상함수 재정의
...
};
#include "MyClass,h"
IMPLEMENT_SERIAL(CMyClass, CObject, 1) // 클래스명, 부모클래스
void CMyClass::Serialize(CArchive& ar)
{
... // 함수 재정의
} |
cs |
4. 타당성검사
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
class CMyClass : CObject
{
int m_start;
public:
virtual void AssertValid() const; // 가상함수 재정의
...
};
#include "MyClass,h"
void CMyClass::AssertValid() const
{
CObject::AssertValid(); // 부모클래스의 AssertValid() 먼저 호출
ASSERT(m_start > 0); // 멤버 변수 m_start 가 0보다 큰지 검사
} |
cs |
5. 가상함수 CObject:Dump() 를 재정의해서 디버깅 과정에서 객체의 내용을 출력할 수 있는데 사용빈도 적다.
동적객체생성은 실행시간클래스정보 기능을 포함하고, 직렬화는 동적객생성 기능을 포함하는 관계는 아래와 같다.
실시간 시간 클래스정보 < 동적객체 생성 < 직렬화