dynamic_cast
Posted 2012. 8. 13. 22:09C++의 대표적인 형변환 두가지중 하나.(나머지 하나는 static_cast)
들어가기 앞서..
일반적인 형변환은뭐..
int a = 3;
float b;
b = (float)a;
printf(.... 3.000~~~~~) 뭐 이렇게 바꾸는겅..
dynamic_cast(동적 형변환)를 알아보자.
- 상속관계 안에서 포인터나 참조의 타입을 기본클래스에서 파생클래스로 다운캐스팅을 할 수 있다.
- 다중상속에서 기본클래스간의 캐스팅을 지원한다
- 다형성과 관계있기 때문에 virtual함수가 하나 이상 있어야 된다.
업캐스팅을 하는 이유와 사용은
부모클래스 a = new 자식클래스();
이렇게 업캐스팅하면 부모클래스에 포함된 것만 사용 할 수 있다.
업 캐스팅으로 인해 서브 클래스를 가리키는 참조변수를 다운 캐스팅해서 인스턴스와 참조변수의 클래스형을 동일학 ㅔ하는것에 한해서만
다운 캐스팅을 허용한다.
즉.. 업 캐스팅된 레퍼런스 변수를 다운 캐스팅한 것은 문제가 안되지만, 인스턴스가 부모 클래스로 선언되어 있는 상태에서 다운 캐스팅을 할 경우
예외 사항을 발생시킨다.
사용점.
상속 관계에 놓여있는 두 클래스 사이에서 유도 클래스의 포인터 및 참조형 데이터를 기초 클래스의
포인터 및 참조형 데이터로 변환 할 경우에 쓰인다.
static_cast 는 반대의 경우에 사용됨.
dynamic_cast는 실행 시간에 안정성을 검사 하도록 컴파일러가 바이너리 코드를 작성하는 반면
static_cast 는 강제형변환이라 안정성이 보장 되지 않음.
그래서 dynamic_cast 는 static_cast에 비해 속도가 느리다.
- Filed under : C++/dynamic_cast