inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

C개발자를 위한 최소한의 C++

가상 함수 작동원리 (동적 바인딩, 가상 함수 테이블)

파생클래스에서 virtual함수를 선언에 대한 질문입니다.

해결된 질문

115

이준표

작성한 질문수 3

0

강의를 보고 파생클래스에서 새로운 virtual함수를 선언 했을 때 vtable에 추가가 되면 어떻게 될까 하고 확인해보니 기본 클래스에서 선언한 virtual함수만 vtable에 추가 되어 있는 것을 확인할 수 있었습니다.

그렇다면 파생클래스에서 새롭게 선언된 virtula함수는 어디에 등록이 되어 있는건가요? vtable은 하나만 존재하는 걸로 아는데 새로운 vtable이라도 생성되는건가요?? 궁금합니다 ㅠㅠ

c++ 가상함수

답변 2

0

널널한 개발자

좋은 세상이네요. 인프런 AI의 답변을 참고하시기 바랍니다.

간단히만 요약하면 vtable은 각 클래스가 개별적으로 갖는 형태가 될 수 있으며 기본 클래스에 존재하는 가상 함수를 파생 형식에서 재정의 할 경우 기본 클래스 vtable에 대상 함수의 메모리 주소가 파생 클래스 함수 주소로 치환됩니다. 그리고 그 시점은 파생 클래스 생성자가 호출될 때 입니다. 참고하시기 바랍니다. 😄

0

이준표

답변 감사합니다!

1

이준표

조사식으로 확인할 때 함수가 추가되어 있지 않아서 몰랐는데 vtable에 배열의 크기가 늘어난 걸로 확인이 되네요!

1

널널한 개발자

와우~! 이런 디테일한 실습을 병행하고 계시는 군요. 멋집니다. 잘 하고 계신겁니다. 😄

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 이준표님!

파생 클래스에서 새로운 virtual 함수를 선언할 때 vtable 내의 구조와 관련하여 몇 가지 중요한 개념을 설명드리겠습니다.

  • 기본 클래스와 파생 클래스의 vtable:

    • 일반적으로 클래스가 virtual 함수를 가지게 되면, 해당 클래스에는 가상 함수 테이블(vtable)이 생성됩니다. 기본 클래스의 vtable에는 기본 클래스의 virtual 함수들이 포함됩니다.
    • 파생 클래스에서는 상속받은 virtual 함수와 새롭게 추가된 virtual 함수에 대한 정보를 가지고 있습니다. 파생 클래스의 vtable은 일반적으로 기본 클래스의 vtable을 상속하거나 확장하여 필요에 따라 자신만의 vtable을 생성합니다.
  • 파생 클래스의 virtual 함수:

    • 파생 클래스가 새로운 virtual 함수를 선언하면, 해당 함수는 파생 클래스의 vtable에 추가됩니다. 기본 클래스의 vtable에 추가되는 것이 아니라, 파생 클래스의 vtable 내에 참조됩니다.
    • 실제로 vtable은 클래스의 인스턴스에 따라 다르게 존재할 수 있지만, 각 객체는 자신의 클래스에 맞는 vtable을 참조합니다. 따라서 파생 클래스는 기본 클래스와 독립적인 vtable을 가질 수 있습니다.
  • vtable의 생성과 사용:

    • vtable은 클래스 계층 구조에서 각 클래스의 가상 함수를 처리하기 위해 효과적으로 사용됩니다. 클래스가 여러 virtual 함수를 상속받게 되면, 각 클래스는 자신의 vtable을 가지며, 임의의 객체가 해당 함수 호출에 맞는 적절한 메소드를 찾을 수 있도록 합니다.

더 깊이 있는 이해를 위해 기존 유사한 질문을 찾아봤습니다. 관련된 질문 링크를 참고하시면 더욱 도움이 될 수 있습니다.

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

인터페이스 상속과 추상 자료형 2:00 질문

0

50

1

13분 42초의 예제

0

51

2

네임스페이스 스코프 내에서 정의된 변수, 함수들이 위치하는 곳 질문

0

46

1

소멸자 가상함수 질문

0

55

2

이동생성자의 매개변수로 넘어가는 임시객체의 값 유지 관련하여 질문이 있습니다.

0

62

2

임시 객체 복사 생성자 질문드립니다

0

64

2

변수 바인딩에 대한 의문점

0

113

1

C++ 파일 구조 질문

0

128

1

빈 포인터에 멤버함수 호출

0

104

1

순수 가상 클래스 선언과 일반 인트 변수의 선언과 다른가요?

0

136

2

안녕하세요. 이동의미론에 대해 제가 잘 이해했는지 궁금합니다.

0

128

1

인스턴스의 개념에 대해 int a(3), int(5) 예시를 바탕으로한 질문입니다.

0

189

2

식별자 검색 순서 관련 namespace 생략 관련 오류에 관한 질문

0

175

1

마지막 주소록 예제 c 파일 한글 깨짐 현상

0

190

1

nullprt vs null

0

153

2

쓸데없지만 질문드리고싶습니다

0

181

1

복사 생성자 질문 드립니다.

0

220

1

생성자 궁금한거 있습니다

0

217

2

단순대입 오류 발생 이유

0

234

1

네가지 형변환 강의 질문

0

282

1

CMyString Step10 강의 질문

0

173

1

임시 객체와 보이지 않는 복사 생성 강의 질문

0

267

2

섹션8 3번째 강의 (실습 프로젝트 - 문자열 필터개선) 질문

0

218

2

차이점을 잘 모르겠습니다.

0

231

1