스파르타 게임개발종합반(Unity)/TIL - 본캠프 매일 공부 기록

2024.05.03 TIL - 클래스 명시적 형변환, 포인터

테크러너 2024. 5. 3.
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)`가 다를 때 괄호의 위치가 중요하단걸 다시 깨닫게 되었다.

반응형

댓글