MST

星途 面试题库

面试题:C++抽象类构造函数调用和多态性

假设有一个抽象基类`Animal`,其中有一个抽象函数`void speak()`,并且`Animal`有构造函数。`Dog`类继承自`Animal`,重写了`speak`函数。在创建`Dog`对象时,描述从调用`Dog`构造函数开始,到最终对象构造完成,`Animal`构造函数以及`Dog`构造函数的执行顺序,以及这种顺序对多态性的影响。
13.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 构造函数执行顺序
    • 当创建Dog对象时,首先会调用Animal的构造函数。这是因为在创建派生类(Dog)对象时,需要先初始化其基类(Animal)部分。在初始化基类部分完成后,才会调用Dog的构造函数。所以执行顺序是Animal构造函数 -> Dog构造函数。
  2. 对多态性的影响
    • 在构造函数执行期间,多态性并不完全生效。当Animal构造函数执行时,对象被视为Animal类型。此时,即使Dog类重写了speak函数,在Animal构造函数内部调用speak函数(如果有这种情况),调用的也是Animal版本的speak函数(因为此时对象还未完全构造为Dog类型)。只有当Dog构造函数执行完毕,对象才完整地成为Dog类型,多态性才能正常发挥作用,即通过Animal指针或引用调用speak函数时,会调用Dog类重写的speak函数。