CPP_어소_84_다형성 (2)

CJB_ny·2022년 7월 29일
0

CPP_AROTHO

목록 보기
83/83
post-thumbnail
post-custom-banner

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을 반환을 한다.

즉, 다운캐스팅이 실패하였을때를 대비 할 수 있다.

RTTI

Run Time Type Identification or Information

실제정채를 테이블에서 확인이 가능하다 런타임 도중에 동적으로

추상화

profile
https://cjbworld.tistory.com/ <- 이사중
post-custom-banner

0개의 댓글