1. 测试代码:
#include <iostream>
using namespace std;
class Base
{
public:
Base() {};
virtual void Show() { cout << "This is Base calss"; }
};
class Derived :public Base
{
public:
Derived() {};
void Show() { cout << "This is Derived class"; }
};
int main()
{
Base* base;
Derived* der = new Derived;
base = dynamic_cast<Base*>(der);
base->Show(); // This is Derived class
输出结果:
2. 测试结果:
#include<iostream>
#include<typeinfo>
using namespace std;
class A {
virtual void process() {}
};
class B : public A {
virtual void size() {}
};
int main()
{
A* a1 = new B;
B* b1 = dynamic_cast<B*>(a1);
if (b1 == nullptr)
{
cout << "b1 nullptr!!" << endl;
}
A* a2 = new A;
B* b2 = dynamic_cast<B*>(a2);
if (b2 == nullptr)
{
cout << "b2 nullptr!!" << endl;
}
B bb;
A& a3 = bb;
B& b3 = dynamic_cast<B&>(a3);
try
{
A aa;
A& a4 = aa;
B& b4 = dynamic_cast<B&>(a4);
}
catch (bad_cast & c)
{
cout << "bad cast!" << endl;
}
return 0;
}
输出结果:
3. 测试结果:
参考资料: