C++多态情况,如何将父指针转换成所指的子类对象的指针
时间: 2025-01-13 08:07:48 浏览: 110
在C++中,多态允许我们通过基类指针或引用访问派生类的对象,即使实际存储的是派生类的实例。当需要将父类指针转换成子类对象指针时,我们可以使用动态类型转换(dynamic_cast)。下面是一个示例:
```cpp
// 假设我们有一个Person和Student类结构体定义
struct Person {
virtual void showInfo() { cout << "Person info" << endl; }
};
struct Student : public Person {
void showInfo() override { cout << "Student info" << endl; }
int m_score;
};
int main() {
// 创建一个Student对象并存储在Person类型的指针变量中
Person* p = new Student();
p->m_age = 10; // 这里设置年龄
// 使用dynamic_cast将父类指针转换为子类指针
Student* studentPtr = dynamic_cast<Student*>(p);
// 如果成功转换,可以调用子类特有的方法
if (studentPtr != nullptr) { // 检查转换是否有效
studentPtr->showInfo(); // 调用子类的方法
} else {
cout << "Failed to cast to Student*" << endl;
}
delete p; // 释放内存
return 0;
}
```
在这个例子中,如果`dynamic_cast`成功,它会返回一个指向子类对象的指针;如果转换无效(比如尝试将非子类对象转换),则返回nullptr。注意,只有当存在有效的虚函数继承关系时,这种转换才可能成功。
阅读全文
相关推荐


















