업캐스팅 다운캐스팅
업캐스팅(upcasting) :
- 자식클래스 포인터 -> 부모클래스 포인터로 변경(묵시적)
- 부모포인터 = 자식포인터
Derived *d = new Derived;
Base *f = d;
다운캐스팅(downcasting)하는 방법
- 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가 지원되는 다형클래스여야 한다
안쓰는게 프로그램성능 측면에서 더 도움이 되긴함
Author And Source
이 문제에 관하여(업캐스팅 다운캐스팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hopark/업캐스팅-다운캐스팅저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)