C++/C++ static, reinterpert, dynamic cast

dynamic_cast

재윤 2024. 1. 26. 17:03
반응형
  • 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++] dynamic_cast에 대해서...

모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast = https://

hwan-shell.tistory.com

 

반응형

'C++ > C++ static, reinterpert, dynamic cast' 카테고리의 다른 글

reinterpret_cast  (0) 2024.01.26
static_cast  (0) 2024.01.26