Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Thank you so much. This solved my problem and I understand what double dispatch means! Here is the complete code for posterity (somebody please teach me how to get the formatting right):</p> <pre><code>#include &lt;iostream&gt; using namespace std; class BaseClass; class Derived1; class Derived2; class Derived3; class Processor { public: Processor(){} virtual void processObj(BaseClass* bc); virtual void processObj(Derived1* d1); virtual void processObj(Derived2* d2); }; class BaseClass{ public: BaseClass(){} virtual void ProcessThis(Processor &amp;p) { p.processObj(this); } virtual void myFunction(){cout &lt;&lt; "base myFunction called" &lt;&lt; endl;} }; class Derived1: public BaseClass{ public: Derived1():BaseClass(){} void ProcessThis(Processor &amp;p) { p.processObj(this); } void myFunction(){cout &lt;&lt; "Derived1 myFunction called" &lt;&lt; endl;} }; class Derived2: public BaseClass{ public: Derived2():BaseClass(){} void ProcessThis(Processor &amp;p) { p.processObj(this); } void myFunction(){cout &lt;&lt; "Derived2 myFunction called" &lt;&lt; endl;} }; class Derived3: public BaseClass{ public: Derived3():BaseClass(){} void ProcessThis(Processor &amp;p) { p.processObj(this); } void myFunction(){cout &lt;&lt; "Derived3 myFunction called" &lt;&lt; endl;} }; void Processor::processObj(BaseClass* bc){cout &lt;&lt; "got a base object" &lt;&lt; endl; bc-&gt;myFunction();} void Processor::processObj(Derived1* d1){cout &lt;&lt; "got a derived1 object" &lt;&lt; endl; d1-&gt;myFunction();} void Processor::processObj(Derived2* d2){cout &lt;&lt; "got a derived2 object" &lt;&lt; endl; d2-&gt;myFunction(); } int main() { BaseClass *bcp=new BaseClass(); Derived1 *dc1p=new Derived1(); Derived2 *dc2p=new Derived2(); Derived3 *dc3p=new Derived3(); Processor p;//can also use Processor* p = new Processor() //first set results bcp-&gt;ProcessThis(p); dc1p-&gt;ProcessThis(p); dc2p-&gt;ProcessThis(p); dc3p-&gt;ProcessThis(p); BaseClass *bcp1=bcp; BaseClass *dc1p1=dc1p; BaseClass *dc2p1=dc2p; BaseClass *dc3p1=dc3p; //second set results bcp1-&gt;ProcessThis(p); dc1p1-&gt;ProcessThis(p); dc2p1-&gt;ProcessThis(p); dc3p1-&gt;ProcessThis(p); Processor p2; bcp1-&gt;ProcessThis(p2); dc1p1-&gt;ProcessThis(p2); dc2p1-&gt;ProcessThis(p2); dc3p1-&gt;ProcessThis(p2); return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload