Static Binding :
By default, matching of function call with the correct function definition happens at compile time.
This is called static binding or early binding or compile-time binding. Static binding is achieved
using function overloading and operator overloading. Even though there are two or more functions
with same name, compiler uniquely identifies each function depending on the parameters passed to
those functions.
Dynamic Binding :
C++ provides facility to specify that the compiler should match function calls with the correct
definition at the run time; this is called dynamic binding or late binding or run-time binding.
Dynamic binding is achieved using virtual functions. Base class pointer points to derived class
object. And a function is declared virtual in base class, then the matching function is identified at
run-time using virtual table entry.
Message Passing: Objects communicate with one another by sending and receiving information to
each other. A message for an object is a request for execution of a procedure and therefore will
invoke a function in the receiving object that generates the desired results. Message passing
involves specifying the name of the object, the name of the function and the information to be sent.