인성 좋은 인성이

cpp 객체지향 - 업 캐스팅(up-casting), 다운 캐스팅(down-casting) 본문

IT공부/C++

cpp 객체지향 - 업 캐스팅(up-casting), 다운 캐스팅(down-casting)

전인성 2019. 4. 9. 18:04

업 캐스팅(up-casting)

- 업 캐스팅이란 파생 클래스 포인터가 기본 클래스 포인터에 치환되는 것이다.

  ex) 사람을 인간이라는 개념이 아닌 상위 개념이라고 할 수 있는 동물로 보는 것이다.

 

int main() {                                  
    B b;                                       
    B *pDer = &b;
    A* pBase = pDer; // 업 캐스팅
}

 

기본클래스의기본 클래스의 주소를 가지고 있을 pDer을 선언하여 기본 클래스의 주소를 대입한다.

A 타입의 포인터 pBase를 선언한 후 pDer을 대입(치환)한다. 따라서 pBase는 B의 상위 클래스인 A에 접근할 수 있다.

하위 클래스인 B의 포인터가 상위 클래스인 A의 포인터에 치환했다. 이를 아래 개념에서 위 개념을 치환한 것이니 업 캐스팅이라고 한다.

 

pDer -> 모든 public 멤버에 접근이 가능하다.

pBase -> 기본클래스의 public 멤버에만 접근이 가능하다.

 

다운 캐스팅(down-casting)

- 기본 클래스의 포인터가 파생 클래스의 포인터에 치환되는 것이다.

  업 캐스팅을 반대로 생각하면 편하다.

 

int main() {                                  
    B b;                                       
    B *pDer;
    A* pBase = &b; // 업 캐스팅...


    
pDer = (A*)pBase; // 다운 캐스팅... 반드시 강제 타입 변환이 필요하다...

 

    ...
}

 

다운 캐스팅은 정말로 업 캐스팅을 반대로 생각하면 된다. 업 캐스팅이 하위 클래스에서 상위 클래스를 치환했다면, 다운 캐스팅은 상위 클래스에서 하위 클래스로 치환하는 것이다.