Early binding: When a non virtual class member function is called, compiler places the code to call the function by symbol name. Thus the function call jumps to a location that is decided by compile time or link time.

class base 
{
  void funct1(void);
};
base b;
b.funct1(); //compiler call address of base::function() symbol

Late binding: When virtual function call is made through a base-class pointer, the compiler quietly inserts code to fetch the VPTR and look up the function address in the VTABLE, thus calling the right function and this is called late/dynamic binding.

class base 
{
  virtual void funct1(void) = 0;
};
class derived: public base 
{
  void funct1(void){}
};
class derived2: public base 
{
  void funct1(void){}
};
derived d;
base * b =  d;
//See how b calls function funct1() of d in three steps
//1) get d::vtable address from b::vptr 
//   [value: b::vptr points to d::vtable]
//2) get b::funct1() address from b::vtable entry 0 
//   [value: function address= d::vtable[0]]
//3) call pointer entry 0 of vtable 0 
//   [ call address pointed by d::vtable[0] ]
b->funct1(); 
derived2 d2;
base * b =  d2;
//See how b calls function funct1() of d2 in three steps
//1) get d2::vtable address from b::vptr 
//   [value: b::vptr points to d::vtable]
//2) get b::funct1() address from b::vtable entry 0 
//   [value: function address= d::vtable[0]]
//3) call pointer entry 0 of vtable 0 
//   [ call address pointed by d::vtable[0] ]
b->funct1(); 

From the above two function call we are clear that we are able to deal with d::vtable and able to call d::funct1() as well as d2::vtable and d2:funct1() accordingly with a single base pointer and the call binding of individual member function was at run time not compile time.

About our authors: Team EQA

You have viewed 1 page out of 62. Your C++ learning is 0.00% complete. Login to check your learning progress.

#