반응형
- dynamic_cast는 주로 다형성(polymorphism)과 관련이 있다.
- 이 연산자는 런타임에 안전한 형변환을 수행한다. 즉, 동적으로 객체의 타입을 확인하고, 그 결과에 따라 적절한 형변환을 수행한다.
- 주로 상속과 가상 함수(Virtual Functions)를 사용하는 클래스 계층 구조에서 사용된다.
dynamic_cast의 기본 형태
- new_type은 형변환하고자 하는 새로운 타입을 나타내며, expression은 형변환할 값이나 포인터입니다.
new_type = dynamic_cast<new_type>(expression);
예제를 통해 공부하자
- 현재 자식이 다시 부모로 캐스팅 하려고 한다. 이런 때를 업캐스팅이라고 한다.
- 업캐스팅을 해주는 것이 dynamic_cast이다.
- Base 클래스에는 가상 함수인 print()가 정의되어 있고, Derived 클래스에서는 오버라이드하고 있다.
- main 함수에서는 Base ***포인터가 Derived 객체를 가리키고 있으며, dynamic_cast를 사용하여 이를 Derived로 안전하게 형변환하는 예시이다.
#include <iostream>
class Base {
public:
virtual void print() const {
std::cout << "Base 클래스" << std::endl;
}
virtual ~Base() {}
};
class Derived : public Base {
public:
void print() const {
std::cout << "Derived 클래스" << std::endl;
}
};
int main() {
Base baseObj;
Derived derivedObj;
Base* ptrBase = &derivedObj;
// dynamic_cast를 사용하여 Derived*로 안전하게 형변환
if (Derived* ptrDerived = dynamic_cast<Derived*>(ptrBase)) {
std::cout << "다형성을 통한 dynamic_cast 성공!" << std::endl;
ptrDerived->print(); // Derived 클래스의 print 함수 호출
} else {
std::cout << "다형성을 통한 dynamic_cast 실패" << std::endl;
}
return 0;
}
결과
jaeyojun@c3r1s6 C++ % ./a.out
다형성을 통한 dynamic_cast 성공!
Derived 클래스
[C++] https://hwan-shell.tistory.com/213
반응형
'C++ > C++ static, reinterpert, dynamic cast' 카테고리의 다른 글
reinterpret_cast (0) | 2024.01.26 |
---|---|
static_cast (0) | 2024.01.26 |