가상 소멸자가 없을때 컴파일 오류 : error C2683: 'dynamic_cast' : 'A'은(는) 다형 형식이 아닙니다.
class A{
public :
A(){}
virtual ~A(){}
};
class C : public A{
public :
C(){}
~C(){}
};
class B : public A{
public :
int num;
B(int dd) : num(dd) { }
B() {}
~B(){}
};
int _tmain(int argc, _TCHAR* argv[])
{
A* ci=new A;
B* bi= dynamic_cast<B*>( ci );
cout<<dynamic_cast<B*>( ci )<<endl; // 000000000
return 0;
}
[직렬상속구조]
A <- B <- C 상속 구조에서 자식이 어느 자식인지 확인하는 방법
#include <iostream>
#include <list>
#include <iterator>
#include <map>
using namespace std;
class Graphic {
public :
Graphic(){}
virtual void Draw(){
cout<<"Graphic\n";
}
};
class ComposedGraphic : public Graphic {
public :
ComposedGraphic(){}
void Add(Graphic *pObj) {
cout << "ComposedGraphic" << endl;
}
};
class SpecificComposedGraphic : public ComposedGraphic {
public :
SpecificComposedGraphic(){}
void Draw() {
cout<<"SpecificComposedGraphic\n";
}
void Add(Graphic *pObj) {
cout << "Specific-ComposedGraphic" << endl;
}
};
void main()
{
Graphic *pObj = new ComposedGraphic;
cout<<dynamic_cast<ComposedGraphic*>(pObj)<<endl; // 주소값 존재
cout<<dynamic_cast<SpecificComposedGraphic*>(pObj)<<endl; // 000000000
// if 문으로 확인할 경우 제일 하단의 클래스부터 dynamic_cast 을 거처서 어느 자식의 클래스인지 확인해야함
delete pObj;
pObj = new SpecificComposedGraphic;
cout<<dynamic_cast<ComposedGraphic*>(pObj)<<endl; //주소값 존재
cout<<dynamic_cast<SpecificComposedGraphic*>(pObj)<<endl; //주소값 존재
delete pObj;
}
아래부터는 퍼온자료.....
[병렬상속구조]
Graphic<---- 클래스A
Graphic<-----클래스B
인 병렬 상속구조일때 해당 클래스가 어느쪽 자식 클래스인지 확인하는 방법
#include <iostream>
#include <list>
#include <iterator>
#include <map>
using namespace std;class Graphic {
public :
Graphic(){}
virtual void Draw(){
cout<<"Graphic\n";
}
};
class A : public Graphic {
public :
A(){}
virtual void Draw(){
cout<<"A\n";
}
};
class ComposedGraphic : public Graphic {
public :
ComposedGraphic(){}
void Add(Graphic *pObj) {
cout << "ComposedGraphic" << endl;
}
};class SpecificComposedGraphic : public ComposedGraphic {
public :
SpecificComposedGraphic(){}
void Draw() {
cout<<"SpecificComposedGraphic\n";
}void Add(Graphic *pObj) {
cout << "Specific-ComposedGraphic" << endl;
}
};void main()
{
Graphic *pObj = new A;
cout<<dynamic_cast<ComposedGraphic*>(pObj)<<endl; // 00000000
cout<<dynamic_cast<SpecificComposedGraphic*>(pObj)<<endl; // 00000000
cout<<dynamic_cast<A*>(pObj)<<endl; // 주소값delete pObj;
}
'디자인패턴과방법론 > 패턴정리와스킬' 카테고리의 다른 글
GOF 디자인패턴 정리 (0) | 2012.11.01 |
---|