MST

星途 面试题库

面试题:C++函数重载与虚函数调用机制进阶

假设有如下C++代码: ```cpp class Base { public: virtual void func(int a) { std::cout << "Base::func(int)" << std::endl; } void func(double b) { std::cout << "Base::func(double)" << std::endl; } }; class Derived : public Base { public: void func(int a) override { std::cout << "Derived::func(int)" << std::endl; } void func(double b) { std::cout << "Derived::func(double)" << std::endl; } }; ``` 请分析以下代码片段的输出结果,并详细解释原因: ```cpp Base* ptr = new Derived(); ptr->func(5); ptr->func(5.5); ```
14.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果
    • Derived::func(int)
    • Base::func(double)
  2. 原因解释
    • 对于ptr->func(5);
      • 这里ptr是一个指向Derived对象的Base指针。func(int)函数在Base类中被声明为virtual,并且在Derived类中被重写(override)。
      • 根据C++的多态性,通过基类指针调用虚函数时,实际调用的是对象实际类型(这里是Derived)中重写的函数版本。所以输出Derived::func(int)
    • 对于ptr->func(5.5);
      • func(double)函数在Base类中不是虚函数,在Derived类中也没有使用override关键字(因为它不是虚函数重写)。
      • 当通过Base指针调用非虚函数时,调用的是指针类型(Base)的函数版本。所以输出Base::func(double)