// 请简述static_cast、dynamic_cast和reinterpret_cast的区别,并给出示例代码进行说明。 // dynamic_cast : // 动态转换,用于多态类之间的转换,即在基类指针或引用和派生类指针或引用之间进行转换。它在运行时进行类型检查,如果转换是安全的,则返回转换后的指针或引用;如果转换不安全,则返回空指针或引用。dynamic_case 只能用于具有虚函数的类之间的转换。 #include using namespace std; class Base { public: virtual void foo() { cout << "基类 foo() 函数" << endl; } }; class Derived : public Base { public: void bar() { cout << "派生类 bar() 函数" << endl; } void foo() { cout << "派生类 foo() 函数" << endl; } }; int main() { Base *p = new Derived(); Derived *dp = dynamic_cast(p); // 向下转换,安全 dp->bar(); // 可以调用派生类的成员函数 dp->foo(); // 可以调用派生类的虚函数 Base *p1 = new Base(); Derived *dp1 = dynamic_cast(p1); // 向下转换,不安全 dp1->bar(); // dp1->foo(); Derived *dp2 = new Derived(); Base *p2 = dynamic_cast(dp2); // 向上转换,安全 p2->foo(); return 0; }