什么时候会用到父类指针指向子类指针呢?
时间: 2024-10-12 17:02:43 浏览: 37
一般来说,父类指针指向子类对象的情况是常见的,特别是在多态性编程中,当您想要保持接口的一致性并且允许不同类型的对象共享同一份代码时。然而,直接让子类指针指向父类对象通常是不推荐的,因为这可能会导致运行时错误[^1]。
例如,在C++中,如果有一个基类`Person`和派生类`student`,您可能会这样设计:
```cpp
class Person {
public:
// 基类的方法
virtual void displayInfo() {
std::cout << "This is a person." << std::endl;
}
};
class student : public Person {
private:
int m_score;
public:
// 派生类的方法
void displayScore() {
std::cout << "Score: " << m_score << std::endl;
}
// 虚函数实现
virtual void displayInfo() override {
Person::displayInfo();
displayScore();
}
};
int main() {
Person* p = new student(); // 父类指针指向子类对象
p->displayInfo(); // 可以调用派生类的displayInfo()
delete p; // 正确删除,因为p实际上是指向子类的
// 如果尝试反过来,如student* s = dynamic_cast<student*>(p); 就是不安全的
// 这里就不演示,因为这通常会导致编译错误或运行时异常
}
```
在这种情况下,通过父类指针操作子类对象,可以避免直接暴露派生类的细节,保持代码的灵活性。但若要直接修改子类特性,应该使用子类指针[^2]。
阅读全文