#include <iostream>
using namespace std;
struct B {
virtual int f() {return 1;}
};
struct D1 : virtual public B {
virtual int f(){return 2;}
};
struct D2 : virtual public B{};
struct M : public D1, public D2 {
virtual int f() {return 3;}
};
int main()
{
M m;
D1 *d1 = &m;
cout << m.f();
cout << d1->f();
cout << static_cast<D2&>(m).f();
cout << static_cast<B&>(m).f();
return 0;
}
Dlaczego ta ostatnia linijka, tj. cout << static_cast<B&>(m).f();
daje output równy 3
, a nie 1
? Jak usunie się dziedziczenie wirtualne, to wtedy program się nawet nie skompiluje (ok, to rozumiem czemu, ale dlaczego f()
nie sięga na samą górę hierarchii)? I w sumie to samo pytanie mógłbym zadać do cout << static_cast<D2&>(m).f();
, czemu tutaj znowu zostaje przy jedynce