printer1(c1): c.x = 1 I am static print1 of myclass1 I am virtual print2 of myclass1 c1.x = 1 c1ptr = &c1 I am static print1 of myclass1 I am virtual print2 of myclass1 c1ptr->x = 1 printer1(c2): c.x = 2 I am static print1 of myclass1 I am virtual print2 of myclass2 c1ptr = &c2 I am static print1 of myclass1 I am virtual print2 of myclass2 c1ptr->x = 2 c2ptr = &c2 I am static print1 of myclass2 I am virtual print2 of myclass2 c2ptr->x = 2 printer1(c3): c.x = 3 I am static print1 of myclass1 I am virtual print2 of myclass3 c1ptr = &c3 I am static print1 of myclass1 I am virtual print2 of myclass3 c1ptr->x = 3 c2ptr = &c3 I am static print1 of myclass2 I am virtual print2 of myclass3 c2ptr->x = 3 c3ptr = &c3 I am static print1 of myclass3 I am virtual print2 of myclass3 c3ptr->x = 3 By value printer2(c3) c.x = 3 I am static print1 of myclass1 I am virtual print2 of myclass1 c1 = c3: I am static print1 of myclass1 I am virtual print2 of myclass1 c1.x = 3 printer1(c1): c.x = 3 I am static print1 of myclass1 I am virtual print2 of myclass1 printer2(c1): c.x = 3 I am static print1 of myclass1 I am virtual print2 of myclass1