MST

星途 面试题库

面试题:C++中函数重载与虚函数调用机制基础

请阐述C++函数重载的条件有哪些?并且说明在一个包含基类和派生类的继承体系中,当基类的某个函数被声明为虚函数,在派生类中重写该虚函数后,通过基类指针指向派生类对象来调用该函数,调用的是基类版本还是派生类版本,为什么?
30.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

C++函数重载的条件

  1. 函数名相同:重载的函数必须具有相同的函数名。
  2. 参数列表不同
    • 参数个数不同:例如void func(int);void func(int, int);
    • 参数类型不同:例如void func(int);void func(double);
    • 参数顺序不同:例如void func(int, double);void func(double, int);
  3. 与返回值类型无关:仅返回值类型不同不足以构成函数重载,比如int func(int);double func(int); 不能构成重载。

虚函数调用

在一个包含基类和派生类的继承体系中,当基类的某个函数被声明为虚函数,在派生类中重写该虚函数后,通过基类指针指向派生类对象来调用该函数,调用的是派生类版本。原因是C++的多态性机制。当函数被声明为虚函数时,C++运行时系统会在运行时根据对象的实际类型(动态类型)来决定调用哪个版本的函数,而不是根据指针或引用的静态类型。在这种情况下,基类指针虽然静态类型是基类,但实际指向的是派生类对象,所以会调用派生类中重写的虚函数版本。