#include <iostream>
class Base
{
public:
Base() = default;
virtual ~Base() = default;
int x;
};
class DerivedA : public Base
{
int y;
};
class DerivedB : public Base
{
float y;
};
int main()
{
Base *base = new DerivedA;
DerivedA *derivedA = dynamic_cast<DerivedA*>(base);
DerivedB *derivedB = dynamic_cast<DerivedB*>(base);
std::cout << "derivedA is " << (derivedA?"valid" : "null") << std::endl;
std::cout << "derivedB is " << (derivedB?"valid" : "null") << std::endl;
delete base;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZQp7CglwdWJsaWM6CglCYXNlKCkgPSBkZWZhdWx0OwoJdmlydHVhbCB+QmFzZSgpID0gZGVmYXVsdDsKCQoJaW50IHg7Cn07CgpjbGFzcyBEZXJpdmVkQSA6IHB1YmxpYyBCYXNlCnsKCWludCB5Owp9OwoKY2xhc3MgRGVyaXZlZEIgOiBwdWJsaWMgQmFzZQp7CglmbG9hdCB5Owp9OwoKaW50IG1haW4oKQp7CglCYXNlICpiYXNlID0gbmV3IERlcml2ZWRBOwoJCglEZXJpdmVkQSAqZGVyaXZlZEEgPSBkeW5hbWljX2Nhc3Q8RGVyaXZlZEEqPihiYXNlKTsKCURlcml2ZWRCICpkZXJpdmVkQiA9IGR5bmFtaWNfY2FzdDxEZXJpdmVkQio+KGJhc2UpOwoJCglzdGQ6OmNvdXQgPDwgImRlcml2ZWRBIGlzICIgPDwgKGRlcml2ZWRBPyJ2YWxpZCIgOiAibnVsbCIpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiZGVyaXZlZEIgaXMgIiA8PCAoZGVyaXZlZEI/InZhbGlkIiA6ICJudWxsIikgPDwgc3RkOjplbmRsOwoJCglkZWxldGUgYmFzZTsKCQoJcmV0dXJuIDA7Cn0=