본문 바로가기
개발/C++

동적 캐스팅(dynamic_cast)

by 남생이야 2024. 6. 7.

 

  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