2013-10-22 4 views
1

두 가지 클래스가 있으며 두 번째 클래스는 첫 번째 클래스를 상속합니다. 기본 클래스에는 가상 함수가 있고 파생 된 가상 함수에는 없습니다. 클래스 아이의 가상 함수 테이블에서 무엇이 발견 될 것인가. 그것은 비어 있거나 전혀 생성되지 않습니다.클래스 하위의 가상 함수 테이블에있는 내용은 무엇입니까? 그것은 비어 있거나 전혀 생성되지 않습니다.

+1

[vtable 레이아웃에 대한 권장 읽기] (http://www.phpcompiler.org/articles/virtualinheritance.html) –

+0

약 한 시간 전에 전화로 인터뷰를했는데이 질문에 대해 가상 함수 테이블 상속 된 클래스의 빈, 그것은 매우 거칠고 부정확 한 대답입니까? –

+0

'기본 클래스에는 가상 함수가 있고 파생 된 가상 함수에는 없습니다. '아니요, 파생 클래스 **에는 가상 함수가 있습니다. 기본 함수는 가상 함수입니다. 그것이 새로운 것을 추가하는지 여부는 중요하지 않습니다. 파생 클래스가 전달 된 경우 참조 또는 포인터 기반에서 작동하는 코드가 가상 함수를 계속 실행할 수 있도록하려면이 작업이 필요합니다. 그게 핵심이야. –

답변

1

일반적인 해결 방법은 클래스 당 vtable을 갖는 것이므로 파생 클래스는 기본 클래스의 vtable과 동일한 별도의 vtable을 갖게됩니다. 이렇게하면 vpointer 값을 가짐으로써 어떤 클래스인지 (예 : dynamic_cast) 찾을 수 있습니다.

3

vtable은 C++ 컴파일러의 구현 세부 사항이므로 표준 답변은 없습니다. 각 vtable에 모든 기본 기능의 전체 가상 함수 집합이 포함되어 있음을 알 수는 있지만, 구현 세부 사항입니다.