title: Overloading method in derived class vs multiple dispatch
body: <p><a href="http://en.wikipedia.org/wiki/Multiple_dispatch" rel="nofollow">According to Wikipedia</a>, <em>Multiple Dispatch</em> is when</p>
  
  <blockquote>
    <p>... a function or method can be dynamically dispatched based on the run time (dynamic) type of more than one of its arguments.</p>
  </blockquote>
  
  <p>However, in C++ I can override a function in the derived class:</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  using namespace std;
  
  class Base
  {
  public:
      virtual void method(int a) { cout &lt;&lt; a; }
      virtual void method(int a, int b) { cout &lt;&lt; a + b; }
  };
  
  class Derived: public Base
  {
      void method(int a) { cout &lt;&lt; a * 10 &lt;&lt; endl; }
      void method(int a, int b) { cout &lt;&lt; (a + b) * 10 &lt;&lt;endl; }
  };
  
  int main()
  {
      Base* derived = new Derived;
      derived-&gt;method(1);
      derived-&gt;method(1, 2);
      return 0;
  }
  </code></pre>
  
  <p>Here the <code>method</code> is being bound at runtime (because I am using <code>virtual</code>) and the particular method is selected based on the input parameters - how is this any different from the Wikipedia description of multiple dispatch?</p>
  
  <p>Secondary question: What is the advantage (if any) to languages which support multiple dispatch if this combination of polymorphism and method overloading exists in C++?</p>