[C++] Dynamic Cast (타입 캐스트 연산자)PROGRAMMING/04. C++2024. 4. 24. 13:47
Table of Contents
반응형
Dynamic Cast
동적으로 형변환시키고, 형변환에 실패할 경우 nullptr를 리턴한다.
부모 클래스의 포인터에서 자식 클래스의 포인터로 다운 캐스팅 해주는 연산자이다.
class의 상속관계에서 형변환을 프로그래머가 올바르게 하도록 도와주는 기능을 제공한다.
Dynamic Cast 사용 제약 사항
- 상속 관계 안에서만 사용 가능
- 하나 이상의 가상함수를 가지고 있어야 함
사용법
dynamic_cast <변환형> (변환할 내용)
dynamic_cast<Test_ClassB*>(temp);
예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#include <stdio.h>
class Test_ClassA
{
public:
virtual ~Test_ClassA() // 가상 소멸자를 써줘야 자기 소멸자까지 호출될 수 있음
{
printf("Test_ClassA 소멸\n");
}
virtual 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 obc;
delete obb;
delete oba;
Test_ClassA* temp = new Test_ClassB();
Test_ClassB* tempB = dynamic_cast<Test_ClassB*>(temp); // 가상화 하기 전에는 문제가 있음
Test_ClassC* tempC = dynamic_cast<Test_ClassC*>(temp);
printf("tempB = %p\n", tempB);
printf("tempC = %p\n", tempC); // 체크 실패여서 NULL이 나옴
delete temp;
return 0;
}
|
cs |
출처 및 참고: 강의 짱잘하시는 울 유니티 선생님 수업
반응형
@HYUNJZZANG :: HyunZzang
HyunZzang의 프로그래밍 공간 / 함께 공부해요!!
도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다 :)