업캐스팅 후 다운캐스팅 과정 질문입니다.
733
작성한 질문수 6
안녕하세요 강사님!
자식에서 부모로 업캐스팅 한 경우, 자식 객체에서만 존재했던
멤버 변수들은 그대로 남아있게 되는건가요?
사실상 부모 포인터가 가리키게 되도록 캐스팅이 되니까,
부모가 가진 멤버 변수들 이외에 자식이 가지고 있던 주소들은
다른 부분에서 쓰레기 값이라고 판단하고 마음대로 쓸 가능성이 있는건지 아닌 것인지 이 부분이 이해가 잘 안됩니다 ...
아직 헷갈리는 점이 많지만, 제가 이해한 바로는 ... ...
업캐스팅 된 이후에도 CRT 힙 매니저가 자식 객체를 가리키는 포인터 였을 때 가졌던 메모리 주소의 범위(?)를 기억하기 때문에, 부모 객체로 업캐스팅 된 이후에도 자식 객체가 사용했던 부분을 계속해서 기억하고 값을 유지하는 것일 것 같다는 생각이 듭니다...
혹시 이게 맞나요???
답변 1
0
class Knight : public Player
{
}
이라고 가정하고,
Knight k;
Player p = k;
와 같이 한다면 실제로 Knight의 일부분이 손실되고
Player과 동일하게 있는 데이터만 복사됩니다.
하지만 포인터를 기준으로
Knight* k = new Knight();
Player* p = k;
를 한다면, 아무일도 일어나지 않습니다.
힙 메모리에 들어가 있는 Knight 객체는 여전히 얌전히 잘 있는 상태이고
이것을 p라는 포인터로 가리키고 있을 뿐이죠.
업캐스팅 된 이후에도 CRT 힙 매니저가 자식 객체를 가리키는 포인터 였을 때 가졌던 메모리 주소의 범위(?)를 기억하기 때문에, 부모 객체로 업캐스팅 된 이후에도 자식 객체가 사용했던 부분을 계속해서 기억하고 값을 유지하는 것일 것 같다는 생각이 듭니다...
절대 아닙니다! 그 정도로 런타임에 똑똑하게 동작하진 않구요.
어떤 타입으로 바라보느냐에 따라 사용할 수 있는 범위가 한정될 뿐이지
원본 데이터는 느긋하게 잘 살아 있습니다.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
559
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
453
1
strcpy() 구현 관련 질문
0
534
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
475
1
클래스 타입의 포인터 질문합니다
0
559
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
503
1
템플릿 특수화 관련 질문
0
389
1
포인터 관련 질문합니다!
0
270
1
Unable to start assembler. Check your settings.
0
848
2
cpu선택
0
548
1
포인터 질문이 있습니다
0
331
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
589
1
iterator 삭제관련
0
415
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
316
1
15 분 45초 대 질문
0
317
0
스택 프레임 질문합니다!
2
312
1
오른값 참조 in 게임
0
391
0
동적할당 질문이 있습니다
0
457
1
안녕하세요 메모리에 대해 질문드립니다.
0
312
1
함수객체 의 매개변수
0
365
1
복사생성자
0
439
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
430
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
359
1
스택 오버플로우
2
801
1





