Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Expertise: All
Oct 22, 1999



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Dynamic Versus Static Binding

Not every call of a virtual function is resolved dynamically. In fact, in many cases the compiler resolves the call statically, even if the function is declared virtual. For example:
  class A
    virtual void func() {/*..*/}
  int main()
    A a;
    A.func(); // resolved at compile time
Dynamic binding applies in two cases: when calling a virtual function through a pointer to a polymorphic object, and when calling a virtual function through a reference to a polymorphic object (a polymorphic object is one that declares or inherits at least one virtual member function). For example.:
  void f(A & ref, A* pa)
     ref.func(); // resolved dynamically
     pa->func(); // resolved dynamically

  int main()
    A a;
    f(a, &a);    
You can bypass the dynamic binding mechanism by using explicit qualification with the scope operator:
  pa->A::func(); // resolved statically
Danny Kalev
Thanks for your registration, follow us on our social networks to keep up-to-date