파생클래스에서 virtual함수를 선언에 대한 질문입니다.
강의를 보고 파생클래스에서 새로운 virtual함수를 선언 했을 때 vtable에 추가가 되면 어떻게 될까 하고 확인해보니 기본 클래스에서 선언한 virtual함수만 vtable에 추가 되어 있는 것을 확인할 수 있었습니다.
그렇다면 파생클래스에서 새롭게 선언된 virtula함수는 어디에 등록이 되어 있는건가요? vtable은 하나만 존재하는 걸로 아는데 새로운 vtable이라도 생성되는건가요?? 궁금합니다 ㅠㅠ
답변 2
0
좋은 세상이네요. 인프런 AI의 답변을 참고하시기 바랍니다.
간단히만 요약하면 vtable은 각 클래스가 개별적으로 갖는 형태가 될 수 있으며 기본 클래스에 존재하는 가상 함수를 파생 형식에서 재정의 할 경우 기본 클래스 vtable에 대상 함수의 메모리 주소가 파생 클래스 함수 주소로 치환됩니다. 그리고 그 시점은 파생 클래스 생성자가 호출될 때 입니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 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





