Mechanism of Vptr and Vtable in C++

前端 未结 3 440
囚心锁ツ
囚心锁ツ 2020-12-03 03:58

In C++, during dynamic binding, consider the following example...

class Base
{
  virtual void fun()
  {
     cout<<\"Base\";
  }      
};

class Derive         


        
相关标签:
3条回答
  • 2020-12-03 04:34

    The Standard doesn't specify the mechanism by which polymorphism is implemented. All the Standard says is how it should work -- not how compiler vendors should implement it.

    That being said, you have it pretty much right as far as GCC under Linux and MSVC under Windows is concerned, and I would expect most other compilers to be similar.

    0 讨论(0)
  • 2020-12-03 04:43

    And bptr->fun() will be getting resolved to bptr->vptr->fun();. This points to the base class function itself.

    Wrong. The Derived instance's vptr (a hidden field in each instance) points to the Derived vtable.

    0 讨论(0)
  • 2020-12-03 04:47

    Just went through this link virtual table and _vptr

    It says that the workflow will be like ..

    1. base_ptr->base_vptr----> to check the access of virtual function in base class.

    2. base_ptr->derived_vptr->virtual_function()---> to call/invoke the virtual function.

    Hence the derived class virtual function is called.. Hope you find it helpful.

    0 讨论(0)
提交回复
热议问题