I'm failing to understand how can a grandchild (D) override a hidden (by C::f2(A&) method (B::f2(A)).
Here is an example code:
class B{
public:
virtual void f2(A a){cout<<"B::f2()"<<endl;}
};
class C:public B{
private:
public:
virtual void f2(A& a){cout<<"C::f2(A&)"<<endl;
}
};
class D:public C{
public:
void f2(A a){cout<<"D::f2(A)"<<endl;}
};
int main(void)
{
B* b = new D();
A a2 = A();
A &a = a2;
b->f2(a); // prints D::f2 - should'nt it print B::f2??
C* c = new D();
c->f2(a); // prints C::f2 - as expected
return 0;
}