inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

다형성 #2

다형성과 가상함수

231

_E

작성한 질문수 1

0

안녕하세요. 다형성 챕터 강의 완강하고 제가 수업을 듣고 개념을 제대로 이해한 것이 맞는지 궁금해서 질문 올립니다.


1. 정적바인딩은 컴파일시 결정된다. 모든 함수는 정적바인딩.

Knight k;

MovePlayer(&k);

void MovePlayer(Player* player)

{

player->Move(); // Move Player!

}

이 함수가 매개변수로 최상위 클래스 타입의 포인터를 매개변수로 받고 있기에 함수 입장에서 컴파일시 Move함수가 최상위 클래스의 Move함수로 인식하기 때문에 이런 현상이 일어나는 것 인가요?

2. 동적바인딩은 런타임시 결정된다. 동적바인딩(가상함수)으로 함수를 설정하고 싶으면 virtual 키워드를 함수앞에 사용. 클래스 내에 가상함수가 있다면, 그 클래스를 생성할때 그 클래스주소 (offset 0)에 vftable 주소가 들어감, vftable에는 가상함수로 지정한 함수들의 주소가 있다. 이 vftable로 인해 최상위 객체로 관리하는 함수에서 파생클래스의 주소를 넘겨주어도 알아서 재정의된 가상함수를 찾아서 실행해 준다.

 

c++

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

_E님의 질문에 대한 답변으로, 다형성과 가상 함수에 대한 개념을 잘 이해하고 계신 것 같습니다! 여러분의 이해를 돕기 위해 관련 내용을 다룬 기존 답변들을 찾아보았습니다.

  1. 정적 바인딩과 동적 바인딩: 정적 바인딩은 컴파일 시간에 결정되는 반면, 동적 바인딩은 런타임에 결정됩니다. 가상 함수와 관련하여, 가상 함수 에 대해 이해하고있는지 봐주세요에서 설명된 것처럼, 가상 함수 테이블을 통해 런타임에 함수 호출이 결정되는 과정을 설명하고 있습니다.

  2. 가상 함수와 다형성: 가상 함수(virtual function)를 사용함으로써 다형성을 구현할 수 있습니다. 클래스 내에 가상 함수가 있다면, 해당 클래스의 객체가 생성될 때 가상 함수 테이블(vftable)에 그 함수들의 주소가 저장되게 됩니다. 이에 대한 상세한 설명은 클래스 타입의 포인터 질문합니다에서 찾아볼 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

소스코드와 관련하여 질문드립니다

0

70

1

map 컨테이너의 emplace 함수에 대해

0

112

2

시작이 안되네요...!

0

96

2

EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유

0

125

1

리틀 엔디안 장점 질문합니다.

0

131

1

메모리 창에 주소를 넣었는데 영어 꺠짐

0

124

1

타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.

0

94

2

map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.

1

138

2

hello world 부터 오류 ㅠㅜ

0

188

1

지역변수가 스택? 레지스터

0

128

2

마지막 문제 질문드립니다.

0

164

2

메모리창이 비활성화됩니다.

0

98

1

이중포인터 강좌 부분 질문있습니다.

0

145

1

2를 더하는 이유

0

133

1

메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다

1

110

1

해당 코드는 왜 오류가 날까요?

0

154

1

마지막 문제 질문 있습니다.

0

119

1

강의 마지막부분에 질문이 있습니다.

0

190

2

Field초기화

0

140

1

virtual과 override 차이

0

314

2

3:30 참조자 리턴

0

167

1

map 찾기

0

158

1

프로그램 질문드려요

0

260

1

캐스팅 질문

0

138

1