#include<iostream>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////////
//RTTI 를 직접 구현해보자.
//결국 type_info 는 클래스당 1개의 static 멤버 data 이다.
//type_info 역할의 클래스를 설계하자.
////////////////////////////////////////////////////////////////////////////////////////
struct CRuntimeClass
{
string name; //클래스 이름을 관리
};
// 이제 아래처럼 약속하자! (RTTI 를 직접 구현해보자!!)
//1. 모든 클래스에는 CRuntimeClass 가 정적 멤버로 있어야 한다.
//2. 이름은 "class클래스 이름 " 으로 약속하자.
//3. 정적 멤버를 리턴하는 가상함수 GetRuntimeClass()를 만들기로 하자.
//
class CObject
{
public:
static CRuntimeClass classCObject;
virtual CRuntimeClass * GetRuntimeClass() { return &classCObject;}
};
CRuntimeClass CObject::classCObject = {"CObject"};
class CWnd : public CObject{
public :
static CRuntimeClass classCWnd;
virtual CRuntimeClass * GetRuntimeClass() { return &classCWnd;}
};
///////////////////////////////////////////////////////////////
// 여기부분에서 virtual 이므로 재정의 하게 된다
// CObject 타입에 CWnd 를 넣으면 vitual table 의 포인터를 동적으로 참조하므로
// CWnd 함수로 된 것이 호출된다. 이로써 CObject 를 오버라이딩한듯한 효과를 이룬다.
//////////////////////////////////////////////////////////////
CRuntimeClass CWnd::classCWnd = {"CWnd"};
void foo(CObject *p){
// p 가 CWnd 인지 조사해보세요
//
if(p->GetRuntimeClass()== &CWnd::classCWnd )
{
cout << " p 는 CWnd 입니다 " <<endl;
}
}
int main(){
CWnd w;
foo(&w);
}
////////////////////////////////////////////////////////////////////////////////
'C,C++ > Android_FrameWork' 카테고리의 다른 글
[SSM 안드로이드 프레임워크 개발 강의]28. 템플릿이야기 2(클래스 템플릿) (0) | 2012.08.16 |
---|---|
[SSM 안드로이드 프레임워크 개발 강의]27. 템플릿이야기 1 (0) | 2012.08.16 |
[SSM 안드로이드 프레임워크 개발 강의]25. RTTI 이야기 (0) | 2012.08.16 |
[SSM 안드로이드 프레임워크 개발 강의]24. 가상 소멸자 이야기 (0) | 2012.08.16 |
[SSM 안드로이드 프레임워크 개발 강의]23. 가상함수의 원리와 함수포인터이해 (0) | 2012.08.16 |