// 动态类型转换 #include using namespace std; class A { protected: int x; public: A(int x) : x(x) {} void show() { cout << "A x = " << x << endl; } }; class B : public A { public: B(int x) : A(x) {} void print() { cout << "B print x = " << x << endl; } }; class C { }; void test1() { int a = 65; // 动态转化不支持基本数据类型之间的转换 // char c = dynamic_cast(a); // char *c = dynamic_cast(&a); // cout << "c = " << c << endl; } void test2() { A a1 = A(10); B b1 = B(20); // 上行转换 A &a2 = dynamic_cast(b1); a2.show(); // a2.print(); // 不存在 print 成员函数 b1.print(); // 下行转换: 动态转换不支持(安全) // B &b2 = dynamic_cast(a2); // b2.print(); B &b3 = static_cast(a2); b3.print(); } // 不相关类型的转换: 不可动态转换 void test3() { A *a = new A(20); // C *p = dynamic_cast(a); } int main() { test3(); return 0; }