>

추상 클래스에 vtable이있는 이유를 이해하는 데 문제가 있습니다. 나는이 질문이 다음 글에서 나왔다는 것을 알고있다.

추상 클래스 C ++에 대한 VTABLE

추상 클래스에 VTABLE이 있습니까?

왜 추상 클래스에 vtable이 있습니까?

내가 아는 것은 다음과 같습니다. vtables는 기본 클래스의 포인터를 통해 파생 된 객체를 사용할 때 다형성 동작을 활성화하는 데 사용됩니다. 이제 해당 기본 클래스의 가상 메소드를 호출하면 기본 객체의 vtable로 이동하여 가리키는 객체의 실제 유형을보고 해당 메소드의 가장 가까운 특수 재정의를 찾아서 사용합니다. 클래스에 하나 이상의 순수 가상 함수가 포함되어 있으면 클래스가 추상적이므로 인스턴스화 할 수 없습니다. 그것이 설명되지 않으면 기본 포인터를 만들 수 없으므로 다형성으로 사용할 수 없습니까? 그렇다면 왜 vtable을 가질 수 있을까요?

  • 답변 # 1

    와이즈 비즈

    여기서 당신의 추론이 시작됩니다. 인스턴스화 할 수 없다고해서 기본 포인터를 만들 수 없다는 것을 의미하지는 않습니다. 최소한의 예 :

    If it cannot be instanciated I cannot create a base pointer

    와이즈 비즈

    구체적인 서브 클래스의 구현으로 가상 함수 호출을 디스패치 할 수 있습니다.두 번째로 생각하면 이것이 vptr의 일반적인 의미입니다.

    추상베이스의 vtable을 사용하여 struct B { virtual void foo() = 0; }; struct D : B { void foo() override {}; }; int main(){ D d; B* ptr = &d; // base pointer to abstract class } 를 구현할 수 있습니다. . vptr이 파생 된 vtable을 아직 가리 키지 않는 것처럼 순수 가상 함수가 기본 생성자 또는 소멸자에서 호출되는 경우에도 사용할 수 있습니다.

    So why would it be able to have a vtable?

  • 이전 배치 파일이 실행 된 횟수를 계산하는 방법은 무엇입니까?
  • 다음 mongodb - 배열을 사용한 집계