[완료] C++에서 class 형 변환에 관하여...

bncrux의 이미지

안녕하세요.. c++공부하는 왕초보입니다..
다형성에 관해 공부하던 도중에 c++클래스 형 변환 하는 부분이 있던데요...
1. 클래스 형 변환은 어떤 때에 사용하는 건지...(아무것도 몰라 예를 들어 주셨으면 좋겠습니다..)
2. 그리고 클래스 형 변환시,
class A
class B : public A
라고 하였을 때에 B를 A로 변환하기도 하던데 이건 어떤때에 쓰나요...
3. 변환 후에 클래스 형은 A로 바뀌나요...?

두서없는 질문이지만 답변 부탁드립니다..

klara의 이미지

말씀하신대로 다형성을 이용하기위해서 형변환을 하는 경우도 있습니다.

예로 드신 클래스 A와 B가 있다면,

B *b = new B;
A *a = b;//여기서 B*에서 A*으로 형변환이 일어납니다.

위처럼 하위클래스에서 상위클래스로의 형변환은 자동으로 일어나며, public 상속 받을 경우 모든 B는 A이므로 합리적입니다.

하지만 상위클래스에서 하위클래스로의 형변환의 경우, 모든 A가 B라고는 할 수 없으므로 따로 캐스팅연산자를 써줘야합니다.

예를 들어

void foo(A *a) {
...
B *b = dynamic_cast<B*>(a);
...
}
이와 같이 쓰게 됩니다. 그런데 dynamic_cast는 이식성이나 성능면에서 문제가 있어서 저기서 넘어온 a가 원래 B*였다는게 확실한 경우는 static_cast를 쓰기도 합니다.