c++如何将父类转成子类?
时间: 2023-06-26 21:05:33 浏览: 55
在 C++ 中,可以使用强制类型转换(type casting)来将父类指针或引用转为子类指针或引用。有两种类型的强制类型转换可以使用:
1. 静态转换(static_cast): 可以将一个指向父类的指针或引用转换为指向子类的指针或引用,前提是父类指针或引用确实指向了一个子类对象。
```cpp
class Parent { /* ... */ };
class Child : public Parent { /* ... */ };
Parent* parent = new Child;
Child* child = static_cast<Child*>(parent);
```
2. 动态转换(dynamic_cast):与静态转换类似,但动态转换会在运行时检查转换的合法性。如果无法进行转换(例如父类指针或引用并不指向一个子类对象),则会返回空指针或引用。
```cpp
class Parent { virtual void foo() {} };
class Child : public Parent { /* ... */ };
Parent* parent = new Parent;
Child* child = dynamic_cast<Child*>(parent); // 返回 nullptr
parent = new Child;
child = dynamic_cast<Child*>(parent); // 返回子类指针
```
需要注意的是,强制类型转换可能存在安全问题,因此应该谨慎使用。如果不确定转换的合法性,应该使用动态转换并检查返回值。