업캐스팅 다운캐스팅

업캐스팅(upcasting) :

  • 자식클래스 포인터 -> 부모클래스 포인터로 변경(묵시적)
  • 부모포인터 = 자식포인터
Derived *d = new Derived;
Base *f = d;

다운캐스팅(downcasting)하는 방법

    1. static_cast (다운캐스팅만을 위한 것은 아님) 컴파일시 형변환하는 방법 // ex) double -> int / int -> double

class Base{
	int b = 1;
};
class Drived : public Base{
	float f = 2;
}

int main(){
	Base *x = new Drived y;
    Drived *z = (Drived*) x; 명시적 형변환, 다운캐스팅o
    std::cout << z->f << std::endl; // print 2;
    
    int *f = (Drived *) x; 가능한데 이상하고 오류가 날 수 있음 
    => 방지하기 위해 static_cast(Drived *)x; 적어도 가능한지를 판단해주셈.. but 오류가 날 수 있음
}
  • RTTI(Run Time Type Information/Identification)
    맨 앞 포인터는 포인터가 가르키는 곳의 정보를 가지고 있음
  • dynamic_cast
    RTTI가 지원되는 다형클래스여야 한다
    안쓰는게 프로그램성능 측면에서 더 도움이 되긴함

좋은 웹페이지 즐겨찾기