반응형
c++의 cast operator를 사용하면 형변환이 가능하다.
static_cast operator를 이용해서 업캐스팅하고 다시 다운캐스팅하면 기존의 값을 유지할까?
*업캐스팅: 자식 클래스에서 부모클래스로 형변환
*다운캐스팅: 부모클래스에서 자식클래스로 형변환
테스트 코드
#include <iostream>
using namespace std;
class Parent {
};
class Child : public Parent {
public:
int value_c = 0;
};
int main()
{
// child instance 생성
Child* child = new Child();
// child의 value_c 값 지정
child->value_c = 3;
// Upcasting : child에서 parent로 형변환
Parent* parent = static_cast<Parent*>(child);
// Downcasting : parent를 다시 child로 형변환
Child* child2 = static_cast<Child*>(parent);
// 자식->부모->자식 형변환이 일어날 경우 child의 값이 유지 되는가 ?
std::cout << "value_c:" << child2->value_c << std::endl;
return 0;
}
결과
두 번의 형변환이 일어났지만,
확인 결과 기존의 값을 유지한다.
그렇다고 안전성을 보장할 순 없다.
dynamic_cast도 테스트해보고, 오버플로우 발생하는 케이스도 추가적으로 테스트해봐야겠다
참고로 짧은 테스트를 할 땐 OnlineGDB를 이용하면 편리하다.
C/C++, python, Java, PHP 등 다양한 언어를 지원해준다.
https://www.onlinegdb.com/online_c++_compiler
반응형