티스토리 뷰

프로그래밍/MFC

CObject 서비스

에어버스 2016. 5. 28. 16:18
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() 를 재정의해서 디버깅 과정에서 객체의 내용을 출력할 수 있는데 사용빈도 적다.

동적객체생성은 실행시간클래스정보 기능을 포함하고, 직렬화는 동적객생성 기능을 포함하는 관계는 아래와 같다.

실시간 시간 클래스정보 < 동적객체 생성 < 직렬화

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30