본문 바로가기
SWE/C++ OOP

c++ type casting 부모 형변환 데이터 손실이 있을까?

by S나라라2 2022. 10. 6.
반응형

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

 

 

 

반응형