c++中用父类指针指向子类对象和子类指针指向子类对象有啥区别,前者意义何在,简要说明
在C++里,父类指针指向子类对象和子类指针指向子类对象,这两种情况存在显著差异,下面为你简要说明。
- 父类指针指向子类对象
当父类指针指向子类对象时,只能访问父类中定义的成员(像函数和变量)。不过,若父类中的函数被声明为虚函数,那么实际调用的会是子类中重写的版本,这一特性被称为多态。多态是C++面向对象编程的关键特性,它能让代码更具灵活性和可扩展性。借助父类指针,我们可以统一处理不同的子类对象,而无需关注具体的子类类型。
下面是一个简单的示例:
class Animal {
public:
virtual void speak() { cout << "Animal speaks" << endl; }
};
class Dog : public Animal {
public:
void speak() override { cout << "Dog barks" << endl; }
};
Animal* ptr = new Dog();
ptr->speak(); // 输出: "Dog barks"(多态生效)
-
子类指针指向子类对象
子类指针指向子类对象时,可以访问子类和父类中定义的所有成员。但这种方式缺乏多态性,因为它只能代表特定的子类类型。 -
父类指针的意义
父类指针的意义主要体现在多态的应用上。它能够实现接口与实现的分离,让代码遵循开闭原则,即对扩展开放、对修改关闭。在实际编程中,父类指针常用于容器(例如vector<Animal*>
)以及函数参数(例如void feed(Animal* a)
),这样可以统一处理不同的子类对象,降低代码的耦合度。
综上所述,父类指针指向子类对象是实现多态的重要手段,能极大提高代码的可维护性和可扩展性。