public void CheckQuestCompletion(Character character, Quest quest)
{
// 코드 생략
((ManaPotionQuest)quest).ClearMonsterCount();
// 코드 생략
}
Quest 클래스가 베이스고, 자식 클래스가 여러개 있었다.
그래서 Quest 클래스형으로 불러오게 됐는데, 자식 클래스인 ManaPotionQuest에 있는 메소드를 불러오고 싶었다.
`quest`를 명시적 형변환으로해서 불러올 수 있을 것 같아서 해봤다.
처음에는 `(ManaPotionQuest)quest.ClearMonsterCount()` 으로 해봤는데 안됐다.
그런데 `((ManaPotionQuest)quest)` 이렇게 한 번 더 감싸니까 성공했다.
이걸보고 C언어에서 배웠던 포인터가 생각났다.
C언어에서 `*p+1`와 `*(p+1)`가 다른데, `*p`에서 `+1`을 하면 `값의 +1`이고, `(p+1)`은 `주소+1`이라서 `*(p+1)`을 하면 주소+1의 값을 가져온다.
그래서 아까 `(ManaPotionQuest)quest`랑 `((ManaPotionQuest)quest)`가 다를 때 괄호의 위치가 중요하단걸 다시 깨닫게 되었다.
반응형
'스파르타 게임개발종합반(Unity) > TIL - 본캠프 매일 공부 기록' 카테고리의 다른 글
2024.05.08 TIL - GravityScale, InputManger 설계 (0) | 2024.05.08 |
---|---|
2024.05.07 TIL - 프로젝트 마무리 (0) | 2024.05.07 |
2024.05.02 TIL - 추상화 클래스(abstract), 인터페이스(interface), 상속, static, 싱글톤 (0) | 2024.05.02 |
2024.05.01 TIL - 클래스 분리의 중요성 (0) | 2024.05.01 |
2024.04.30 TIL - Json 저장용 리스트 클래스 만들기 (0) | 2024.04.30 |
댓글