2009-08-02 8 views
1

하나의 기본 클래스가 있고 그 중 10 개의 다른 구체적인 파생 클래스를 파생하면 각 파생 클래스마다 다른 vtable이 생깁니 까?파생 된 콘크리트, 클래스의 vtables

+0

언어/런타임/컴파일러 등은 무엇입니까? –

+0

제 추측은 C++입니다. 가상 및 비 가상 방법을 모두 갖춘 유일한 언어입니다. – EFraim

+0

이 태그가 주관적인 이유는 무엇입니까? –

답변

0

파생 클래스가 가상 메서드를 재정의/선언하는지 여부에 따라 다릅니다.

4

파생 클래스의 기본 클래스 나 모든 클래스에 가상 함수가 있으면 일반적으로 그렇습니다. 왜 중요 함?

두 클래스는 가상 함수 세트가있는 경우에만 vtable을 공유 할 수 있습니다. 파생 클래스는 가상 함수를 무시하지 않으면 기본 클래스와 vtable을 공유 할 수 있습니다.

동일한 파생 클래스의 멤버 함수가 동일한 기본 클래스의 함수를 모두 재정의하지 않는 한 파생 클래스는 다른 파생 클래스와 vtable을 공유 할 수 없습니다. 다른 파생 클래스의 멤버 함수와 다른 형식입니다.

+0

나는 모든 파생 된 클래스가 하나의 v 테이블을 사용할 것인지, 아니면 다른 것을 가질 것인지 혼란스러워했다. –

+0

네, 실제로 파생 된 모든 클래스는 기본 클래스가 순전히 추상적이어서 자신이 가진 가상 함수를 타고 넘어서있다. v 테이블 –

+3

가상 함수 세트가 indentical 인 경우 vtable 만 공유 할 수 있습니다. 이는 파생 클래스가 가상 함수를 무시하지 않으면 기본 클래스와 vtable을 공유 할 수 있음을 의미합니다. –

관련 문제