11. 다양한 종류의 객체들을 다형성을 사용하는 경우가 많다. 객체를 다른 것으로 형 변형하기 전에 그 객체가 호환 가능한 형인지를 확인해야 한다. booldtiClass::IsA( dtiClass* pType ) { dtiClass* pStartType = this; while( pStartType ) { if ( pStartType == pType ) { return true; } else { pStartType = pStartType->GetParent(); } } return false; }
12. IsA함수를 이용하여 안전한 형변형을 위한 함수를 만들 수 있다. void* CRootClass::SafeCast( dtiClass* pCastToType ) { if ( Type.IsA( pCastToType ) ) { return this; } else { return NULL; } } 형 변형이 안전하지 않다면 NULL을 돌려준다.
14. 객체에 대한 정보를 영속적으로 보관하거나 다시 들여오는 방법을 살펴보자 데이터를 저장하는 클래스를 만들고 파일에 읽거나 쓰기를 위한 Stream 맴버 함수와 friend << 연산자를 정의해준다 friend CdtiBin& operator<<( CdtiBin& bin, int& data ) { bin.Stream( &data, sizeof(int) ); return bin; } 클래스가 저장 클래스와 연동할 수 있는 함수를 만들어준다. void CChildClass::Serialize( CdtiBin& ObjStore ) { Root::Serialize( ObjStore ); ObjStore << fMemberFloat << iAnotherInt; }