c++如何将父类转成子类
时间: 2024-05-06 13:18:34 浏览: 22
在 C++ 中,可以使用类型转换来将指向父类对象的指针或引用转换为指向子类对象的指针或引用。这种类型转换被称为向下转型(downcasting)。需要注意的是,向下转型可能会导致错误,因为父类指针或引用可能并不指向一个子类对象。
下面是两种向下转型的方法:
1. 静态转型(static_cast):静态转型可以将一个父类指针或引用转换为一个子类指针或引用。静态转型在编译时就确定了转换的类型,如果转换类型不正确,编译时会报错。示例代码如下:
```cpp
class Parent {
public:
virtual void foo() {}
};
class Child : public Parent {
public:
void bar() {}
};
int main() {
Parent* p = new Child;
Child* c = static_cast<Child*>(p);
c->bar();
delete p;
return 0;
}
```
2. 动态转型(dynamic_cast):动态转型可以在运行时检查一个父类指针或引用是否指向一个子类对象,如果是,则返回一个指向子类对象的指针或引用,否则返回空指针或引用。示例代码如下:
```cpp
class Parent {
public:
virtual void foo() {}
};
class Child : public Parent {
public:
void bar() {}
};
int main() {
Parent* p = new Child;
Child* c = dynamic_cast<Child*>(p);
if (c != nullptr) {
c->bar();
}
delete p;
return 0;
}
```
需要注意的是,使用动态转型时,父类必须至少有一个虚函数,否则动态转型会失败。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)