结构体指针 父类转换子类
时间: 2024-08-06 08:00:49 浏览: 113
C语言结构体的“继承”
结构体指针是一种编程技术,在C语言中,它允许我们存储结构类型的地址,并通过这个指针间接访问和操作该结构内的数据。当我们有一个指向父类的指针,但在运行时发现其实是指向了子类的对象时,可以进行所谓的“向下转型”(downcasting),即从父类指针动态地转化为实际指向子类的指针。
例如,假设我们有这样一个继承关系:
```c
struct Base {
int value;
};
struct Derived : public Base {
char extra;
};
```
如果我们有一个`Base* base_ptr`,指向了一个`Derived`对象,可以这样做:
```c
Base* base_ptr = new Derived();
base_ptr->value; // 可以访问Base的成员
// 如果我们知道它是Derived,可以安全地向下转型
Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr);
derived_ptr->extra; // 访问Derived特有的成员
```
需要注意的是,如果`dynamic_cast`失败,尝试将父类指针转化为子类指针会返回NULL,并引发运行时错误。因此,一定要确保这种转换是合理的,比如通过条件检查或已知的类型信息。
阅读全文