C++ 형 변환 - dynamic_cast

진경천·2023년 10월 29일
0

C++

목록 보기
60/90

dynamic_cast

부모 클래스의 포인터에서 자식 클래스의 포인터로 안전한 다운 캐스팅 해주는 연산자
런타임 도중 안전한 형 변환 제공
up casting = 자식 -> 부모 로 형변환
down casting = 부모 -> 자식 으로 형변환

dynamic_cast<바꾸려는 새로운 타입>(대상)

성공할 경우 : new_type의 value를 return 합니다.
실패할 경우(new_type = pointer) : null pointer
실패할 경우(new_type = reference) : bad_cast (exception 처리됩니다.)

예제

#include <iostream>

using namespace std;

class Parent {
public:
	virtual ~Parent(){}
};

class Child : public Parent {
public:
	void func() {
		cout << "func" << endl;
	}
};

void foo(Parent* p) {
	Child* child = dynamic_cast<Child*>(p);
	if (child != nullptr)
		child->func();
}

int main() {
	Parent* p = new Child;
	foo(p);
}
  • 실행 결과

    func

class Parent {

};

다형 클래스 형식이어야 사용 가능(virtaul 함수가 있어야 사용 가능)

cross casting

#include <iostream>

using namespace std;

class A {
public:
	virtual ~A(){}
};

class B0 : public A {

};

class B1 : public A {

};

class C : public B0, public B1 {

};

int main() {
	C c;
	B0* b0 = &c;
	B1* b1 = dynamic_cast<B1*>(b0);
}

sibling(형제)관계라면 크로스 캐스팅이 된다.

profile
어중이떠중이

0개의 댓글