Dynamic Versus Static Binding

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  {  public:    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


Share the Post: