virtual是定义C++中 虚函数的关键字,这种 函数 方法可以被子类 继承 覆盖,通常使用 动态调度实现。这一概念是 面向对象程序设计中(运行时) 多态的重要组成部分。简言之,虚函数可以给出目标函数的定义,但该目标的具体指向在编译期可能无法确定。

 面向对象程序设计中,派生类继承自基类。使用 指针 引用访问派生类对象时,指针或引用本身所指向的类型可以是基类而不是派生类。如果派生类覆盖了基类中的方法,通过上述指针或引用调用该方法时,可以有两种结果:

  1. 调用到基类的方法:编译器根据指针或引用的类型决定,称作“早绑定”;
  2. 调用到派生类的方法:语言的运行时系统根据对象的实际类型决定,称作“迟绑定”。

虚函数的效果属于后者。如果问题中基类的函数是“虚”的,则调用到的都是最终派生类(英语:most-derived class)中的函数实现,与指针或引用的类型无关。反之,如果函数非“虚”,调用到的函数就在编译期根据指针或者引用所指向的类型决定。

作者:꧁执笔小白꧂