#include <iostream>
using namespace std;
class B;
void f( const B& b );
class B
{
friend void f( const B& b );
int p = 42;
virtual int getP() const { return p; }
};
class D : public B
{
virtual int getP() const { return p; }
int p = 100500;
};
void f( const B& b )
{
cout << b.getP() << endl;
//cout << dynamic_cast<const D&>(b).getP() << endl; // так уже нельзя
}
int main() {
B b;
f( b );
D d;
f( d );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEI7CnZvaWQgZiggY29uc3QgQiYgYiApOwoKY2xhc3MgQgp7CiAgICBmcmllbmQgdm9pZCBmKCBjb25zdCBCJiBiICk7ICAKICAgIGludCBwID0gNDI7ICAgIAogICAgdmlydHVhbCBpbnQgZ2V0UCgpIGNvbnN0IHsgcmV0dXJuIHA7IH0KfTsKCmNsYXNzIEQgOiBwdWJsaWMgQgp7CiAgICB2aXJ0dWFsIGludCBnZXRQKCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAgaW50IHAgPSAxMDA1MDA7Cn07Cgp2b2lkIGYoIGNvbnN0IEImIGIgKQp7CiAgICBjb3V0IDw8IGIuZ2V0UCgpIDw8IGVuZGw7CiAgICAvL2NvdXQgPDwgZHluYW1pY19jYXN0PGNvbnN0IEQmPihiKS5nZXRQKCkgPDwgZW5kbDsgLy8g0YLQsNC6INGD0LbQtSDQvdC10LvRjNC30Y8KfQoKaW50IG1haW4oKSB7CiAgICBCIGI7CiAgICBmKCBiICk7CiAgICAKICAgIEQgZDsKICAgIGYoIGQgKTsKICAgIAoJcmV0dXJuIDA7Cn0=