MST

星途 面试题库

面试题:C++派生新类中的虚函数与多态性问题

已知有基类Animal,有虚函数void speak()。现有派生类Dog从Animal派生而来。在派生新类的过程中,完成三个步骤后,假设我们有一个Animal指针指向Dog对象,调用speak函数,阐述这个过程中多态性是如何体现的,并且说明派生新类这三个步骤对多态性实现起到了什么作用。
23.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 多态性的体现
    • Animal* ptr = new Dog();,通过ptr->speak();调用speak函数时,实际调用的是Dog类中的speak函数。这是因为在运行时,程序会根据指针实际指向的对象类型(即Dog对象)来决定调用哪个类的speak函数,而不是根据指针的静态类型(Animal类型)。这种运行时根据对象实际类型来决定调用哪个函数版本的机制就是多态性的体现。
  2. 派生新类三个步骤对多态性实现的作用
    • 继承Dog类从Animal类派生,使得Dog类拥有了Animal类的成员(包括speak函数),为多态性提供了基础。Dog类可以基于Animal类进行扩展和重写,并且可以将Dog对象视为Animal对象来使用,如上述Animal* ptr = new Dog();这种赋值操作。
    • 虚函数Animal类中的speak函数声明为虚函数。虚函数的存在使得在运行时可以根据对象的实际类型来动态绑定函数调用。如果speak函数不是虚函数,那么ptr->speak();调用的将是Animal类中的speak函数,而不是Dog类中重写后的speak函数,就无法实现多态。
    • 重写Dog类对Animal类中的speak函数进行重写(覆盖)。重写使得Dog类有了自己特定的speak函数实现,在运行时多态机制确定要调用Dog类对象的speak函数时,就会调用到这个重写后的版本,从而实现了不同派生类对象的不同行为,这是多态性在行为上的具体体现。