-----------
이거 c++ 인데 실행결과가 제가 생각한거랑 좀 달라서요.
저는 마지막에 오버라이딩 된 Third의 MyFunc()가 실행될거라고 생각했는데
결과는
First
Second
Third
이렇게 출력되네요.. 왜그런건가요?
코틀린에서는 제가 생각한대로 실제 가리키고 있는 객체를 기준으로해서 실행돼서
결과가 전부
Third
Third
Third
이렇게 출력됐는데.. c++은 좀 다른가요?
-----------
이거 c++ 인데 실행결과가 제가 생각한거랑 좀 달라서요.
저는 마지막에 오버라이딩 된 Third의 MyFunc()가 실행될거라고 생각했는데
결과는
First
Second
Third
이렇게 출력되네요.. 왜그런건가요?
코틀린에서는 제가 생각한대로 실제 가리키고 있는 객체를 기준으로해서 실행돼서
결과가 전부
Third
Third
Third
이렇게 출력됐는데.. c++은 좀 다른가요?
C++ 다형성 이해가 없어서 그려. 책 다시 봐
저거 가상함수로 만들면 해결 될 거예요
아 진짜네요. 이렇게하니까 결과가 코틀린이랑 동일하게 나오네요. 선생님 이게 c++은 컴파일할때랑 런타임일 둘다 똑같이 변수타입만 보고 동작하나봐요. 코틀린은 동작이 다른거로 아는데. virtual 키워드 붙여주니까 생각하던 대로 나오네요 이거보니 코틀린은 내부적으로 가상함수가 동작하나봐요
제가 코틀린은 잘 모르지만 아마 그런 것 같아요
tptr, sptr은 어디서 나오는거냐
kotlin은 기본적으로 jvm 인데, jvm에서 모든 method는 virutal method이고 따라서 v-table을 뒤져서 구현을 찾음( 이건 runtime에서 수행됨) 반면에 C++는 virutal method가 아니면 컴파일러가 type을 기준으로 컴파일 타임에 구현을 정해버림( 이건 컴파일 타임 수행)
선생님근데 코틀린도 컴파일타임에는 변수타입을 기준으로 정하는거로 아는데 아닌가여? 컴파일타임에는 참조변수타입을 기준으로하구 런타임으로 넘어가면 실제로 참조하고 있는 변수를 기준으로 한다고 알고있는데 아닌가여? 글구 c++도 virtual 메소드를 사용하면 코틀린이랑 똑같이 동작하나여? 그니까 컴파일타임때는 변수타입을 기준으로하고 런타임에는 실제 참조 변수기준으로하나여? 아니면 컴파일타임시부터 아예 실제 참조변수를 기준으로 하나여?