BLOG main image




특별히 추상클래스를 부모로 둘 필요가 없다 생각되고 각 다른타입으로 생성될 템플릿 클래스들이 자식으로 있을때

공통적으로 업캐스팅을 하고자 할때 다음처럼 사용


comment : 자식은 각 고유의 타입마다 다른 형태로 컴파일 타임에 인스턴스화 되어야 할때 사용

그외에도 목적에 맞게 사용하면 그만이지 뭐..






class objectBase_sjh{

public :

virtual ~objectBase_sjh(){};

virtual HRESULT renderGeoMatricalNormal(){ return S_OK; };                            //템플릿이 아닌 클래스에서의 가상함수

};





template<typename T>                                                                                            //템플릿이 아닌 클래스 objectBase_sjh 를 상속받지만

class objectCommon_sjh : public objectBase_sjh{                                                    //objectCommon_sjh  클래스는 템플릿 클래스

protected:

typedef std::vector<TEXTUREINFO_SJH> vecTextureInfo_sjh;                            

objectCommon_sjh(){}


public :

  //부모에서 정의한 virtual 을 따로 정의해줄 필요는 없다, 필요하다면 재정의


};




template<typename T>

class xFileObject_sjh : public objectCommon_sjh<T>{

public :

T _data;

public :

xFileObject_sjh(){

_data=60;

}

~xFileObject_sjh(){}

explicit xFileObject_sjh( LPDIRECT3DDEVICE9 pD3dDevice,  

std::wstring xFileName=_T(""), 

std::wstring textureName=_T(""), 

const std::wstring& directoryPath=_T("images/")   )

}


public :


virtual HRESULT renderGeoMatricalNormal(){ std::cout<<"xFileObject_sjh\t"<<_data<<std::endl;  return S_OK; }           //xFileObject_sjh 60      가 출력된다


};


//////////////////////////////////////////////////////////////////////////


template<typename T>                                                                                     //objectCommon_sjh 과는 다른 용도로 사용될 동일한 objectBase_sjh 를 상속받는

class objectOther_sjh : public objectBase_sjh{                                                  //템플릿클래스

protected:

typedef std::vector<TEXTUREINFO_SJH> vecTextureInfo_sjh;

objectOther_sjh(){}


public :




};



template<typename T>

class renderObject_sjh : public objectOther_sjh<T>{

public :

T _data;

public :

renderObject_sjh(){

_data=30.5;

}

~renderObject_sjh(){}

explicit renderObject_sjh( LPDIRECT3DDEVICE9 pD3dDevice,  

std::wstring xFileName=_T(""), 

std::wstring textureName=_T(""), 

const std::wstring& directoryPath=_T("images/")   )

}


public :



virtual HRESULT renderGeoMatricalNormal(){ std::cout<<"renderObject_sjh\t"<<_data<<std::endl;  return S_OK; }            //renderObject_sjh 30.5      가 출력된다


};



int main()

{

objectBase_sjh* instance1=new xFileObject_sjh<int>;


instance1->renderGeoMatricalNormal();



objectBase_sjh* instance2=new renderObject_sjh<float>;

instance2->renderGeoMatricalNormal();




getchar();


delete instance2;

delete instance1;


return 0;


}








반응형

+ Recent posts