cast operator
C++에서는 형변환을 위한 연산자를 제공한다
dynamic_cast dynamic cast는 두 가지의 경우에서 사용할 수 있다. 첫째는 상속 관계에 놓여 있는 두 클래스 사이에서 유도 클래스의 포인터 및 참조형 데이터를 기초 클래스의 포인터 및 참조형 데이터로 형 변환하는 경우이다. 둘때는 polymorphic 클래스에서 상속 관계에 놓여있는 두 클래스 사이에서 기초 클래스의 포인터 및 참조형 데이터를 유도 클래스의 포인터 및 참조형 데이터로 형 변환하는 경우이다.
static_cast 유도 클래스의 포인터 및 참조형 데이터를 기초 클래스의 포인터 및 참조형 데이터뿐만 아니라 기초 클래스의 포인터 및 참조형 데이터도 유도 클래스의 포인터 및 참조형 데이터로 조건 없이 변환한다. 하지만 책인은 개발자의 몫이다.
const_cast 포인터와 참조자의 const 키워드의 성향을 제거한다.
reinterpret_cast 전혀 상관없는 자료형의로의 형 변환에 사용된다.
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 56 57 58 59 namespace VirtualClass { class A { public : A () { cout << "A 생성자" << endl; } ~A () { cout << "A 소멸자" << endl; } void f () { cout << "A function" << endl; } }; class B : public A { public : B () { cout << "B 생성자" << endl; } ~B () { cout << "B 소멸자" << endl; } void f () { cout << "B function" << endl; } }; class AA { public : AA () { cout << "AA 생성자" << endl; } virtual ~AA () { cout << "AA 소멸자" << endl; } virtual void f () { cout << "AA function" << endl; } }; class BB : public AA { public : BB () { cout << "BB 생성자" << endl; } ~BB () override { cout << "BB 소멸자" << endl; } void f () override { cout << "BB function" << endl; } }; void castingOperator () { B *b = new B (); A *a = dynamic_cast <A *>(b); a->f (); b->f (); A *prime_a = new B (); B *prime_b = static_cast <B *>(prime_a); prime_a->f (); prime_b->f (); AA *aa = new BB (); BB *bb = dynamic_cast <BB *>(aa); aa->f (); bb->f (); delete a; delete prime_a; delete aa; } }