Search Results for 'C++/dynamic_cast'

1 POSTS

  1. 2012.08.13 dynamic_cast

dynamic_cast

Posted 2012. 8. 13. 22:09

C++의 대표적인 형변환 두가지중 하나.(나머지 하나는 static_cast)

 

들어가기 앞서..

일반적인 형변환은뭐..

int a = 3;

float b;

b = (float)a;

printf(.... 3.000~~~~~) 뭐 이렇게 바꾸는겅..

 

dynamic_cast(동적 형변환)를 알아보자.

  1. 상속관계 안에서 포인터나 참조의 타입을 기본클래스에서 파생클래스로 다운캐스팅을 할 수 있다.
  2. 다중상속에서 기본클래스간의 캐스팅을 지원한다
  3. 다형성과 관계있기 때문에 virtual함수가 하나 이상 있어야 된다.

 

 업캐스팅을 하는 이유와 사용은

부모클래스 a = new 자식클래스();

이렇게 업캐스팅하면 부모클래스에 포함된 것만 사용 할 수 있다.

 

업 캐스팅으로 인해 서브 클래스를 가리키는 참조변수를 다운 캐스팅해서 인스턴스와 참조변수의 클래스형을 동일학 ㅔ하는것에 한해서만

다운 캐스팅을 허용한다.

즉.. 업 캐스팅된 레퍼런스 변수를 다운 캐스팅한 것은 문제가 안되지만, 인스턴스가 부모 클래스로 선언되어 있는 상태에서 다운 캐스팅을 할 경우

예외 사항을 발생시킨다.

 

사용점.

상속 관계에 놓여있는 두 클래스 사이에서 유도 클래스의 포인터 및 참조형 데이터를 기초 클래스의

포인터 및 참조형 데이터로 변환 할 경우에 쓰인다.

 

static_cast 는 반대의 경우에 사용됨.

 

dynamic_cast는 실행 시간에 안정성을 검사 하도록 컴파일러가 바이너리 코드를 작성하는 반면

static_cast 는 강제형변환이라 안정성이 보장 되지 않음.

그래서 dynamic_cast 는 static_cast에 비해 속도가 느리다.