dynamic_cast函数
时间: 2024-02-05 09:14:50 浏览: 75
`dynamic_cast` 是 C++ 中的一个类型转换运算符,用于在运行时进行多态类型的转换。它可以将基类指针或引用转换为派生类指针或引用,同时还能进行安全检查,确保转换是有效的。
`dynamic_cast` 语法如下:
```cpp
dynamic_cast<type*>(expression);
dynamic_cast<type&>(expression);
```
其中 `type` 是目标类型,`expression` 是要进行转换的对象。
`dynamic_cast` 有以下几种用法:
1. 将基类指针或引用转换为派生类指针或引用。
```cpp
Base* base_ptr = new Derived;
Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr);
```
2. 将派生类指针或引用转换为基类指针或引用。
```cpp
Derived* derived_ptr = new Derived;
Base* base_ptr = dynamic_cast<Base*>(derived_ptr);
```
3. 将指针或引用转换为虚基类指针或引用。
```cpp
class Base {
public:
virtual void func() {}
int data;
};
class Derived : virtual public Base {};
Derived* derived_ptr = new Derived;
Base* base_ptr = dynamic_cast<Base*>(derived_ptr);
```
需要注意的是,如果进行 `dynamic_cast` 的对象不是多态类型,即没有虚函数,那么 `dynamic_cast` 将无法进行转换,程序将会编译错误。另外,如果转换不合法,即源对象不是目标类型的对象,那么 `dynamic_cast` 将返回一个空指针或引用(对于指针类型返回 `nullptr`,对于引用类型则会抛出 `std::bad_cast` 异常)。
阅读全文