인프런 커뮤니티 질문&답변
파생클래스에서 virtual함수를 선언에 대한 질문입니다.
해결된 질문
작성
·
98
·
수정됨
답변 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을 가지며, 임의의 객체가 해당 함수 호출에 맞는 적절한 메소드를 찾을 수 있도록 합니다.
더 깊이 있는 이해를 위해 기존 유사한 질문을 찾아봤습니다. 관련된 질문 링크를 참고하시면 더욱 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






답변 감사합니다!