Child클래스는 메모리 구조를 보면 이런 "직렬 형태"로 되어있다.
Parent* pParent;
pParent = &child;
부모 포인터 타입으로 접근을 하여도
이렇게 접근을 하기 때문에 문제가 되지 않는다.
하지만 부모포인터 타입으로 접근을 하였을 경우 실제 접근할 수 있는 기능은
Parent안에 정의되어 있는거 밖에 없다.
=> 220810 루키스 CPP
"바인딩" 때문에 이러한 현상이 발생한다.
https://velog.io/@starkshn/%EB%8B%A4%ED%98%95%EC%84%B1-1-2
table에 미리 설정해놓은 함수를 호출 하러 가는 것이다.
pParent = &child; // 이렇게 해주고 아래 코드를 실행하면 상관없지만
// pParent = &parent; 한상태로 아래 코드를 실행한다면
// C 스타일의 강제 형변환 (조금 위험함)
((Child*)pParent)->Test();
// cpp의 다이나믹 캐스트
Child* pChild = dynamic_cast<Child*>(pParent);
if (nullptr != pChild)
pChild->Test();
C스타일의 경우 바로 에러가 나지만
다이나믹 캐스트의 경우 nullptr을 반환을 한다.
즉, 다운캐스팅이 실패하였을때를 대비 할 수 있다.
Run Time Type Identification or Information
실제정채를 테이블에서 확인이 가능하다 런타임 도중에 동적으로