C++ 에서는 다운 캐스팅 시에 안전하게 검사하기 위한 dynamic_cast가 존재한다.
주로 다형성을 이용한 클래스 계층 구조에서 기본 클래스 포인터나 참조를 유도 클래스 타입으로 캐스팅할 때 사용한다.
dynamic_cast를 사용 시 유의할 점
- 반드시 다형성을 구성항 클래스여야 한다.
- 검사 후, 참이면 해당 다운 캐스팅 연산자로 선언한 타입을 반환, 되지 않을 경우 NULL 을 반환한다.
더보기
#include <stdio.h>
class Test_ClassA
{
public:
virtual ~Test_ClassA()
{
printf("Test_ClassA 소멸\n");
}
void Test()
{
}
};
class Test_ClassB : public Test_ClassA
{
public :
~Test_ClassB()
{
printf("Test_ClassB 소멸\n");
}
};
class Test_ClassC : public Test_ClassA
{
public:
~Test_ClassC()
{
printf("Test_ClassC 소멸\n");
}
};
int main()
{
Test_ClassA* oba = new Test_ClassA();
Test_ClassA* obb = new Test_ClassB();
Test_ClassA* obc = new Test_ClassC();
delete oba;
delete obb;
delete obc;
Test_ClassA* temp = new Test_ClassB();
Test_ClassB* tempB = dynamic_cast<Test_ClassB*>(temp);
Test_ClassC* tempC = dynamic_cast<Test_ClassC*>(temp); // 캐스팅이 성공하면 캐스팅된 객체 반환 실패시 NULL
//temp와 tempB는 같은 객체
printf("temp = %p\n", temp);
printf("tempB = %p\n", tempB);
printf("tempC = %p\n", tempC);
return 0;
}
'개발 > C++' 카테고리의 다른 글
가상 기초 클래스( virtual based class) (0) | 2024.06.28 |
---|---|
이름 공간(namespace) (0) | 2024.06.15 |
인라인(Inline) 함수 (2) | 2024.06.11 |
매크로(Macro) (0) | 2024.06.07 |
가상 함수 (2) | 2024.06.03 |