Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language:
Expertise: All
Oct 21, 1999

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
Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date