英语翻译
adj.实质上的,事实上的;(计算机)虚拟的;<物>有效的,虚像的;(粒子)实际存在的物。
目的
在面向对象程序设计中,派生类继承自基类。使用指针或引用访问派生类对象时,指针或引用本身所指向的类型可以是基类而不是派生类。如果派生类覆盖了基类中的方法,通过上述指针或引用调用该方法时,可以有两种结果:
- 调用到基类的方法:编译器根据指针或引用的类型决定,称作“早绑定”。
2.调用到派生类的方法:语言的运行时系统根据对象的实际类型决定,称作“迟绑定”。
虚函数的效果属于后者。如果问题中基类的函数是“虚”的,则调用到的都是最终派生类(英语:most-derivedclass)中的函数实现,与指针或引用的类型无关。反之,如果函数非“虚”,调用到的函数就在编译期根据指针或者引用所指向的类型决定。有了虚函数,程序甚至能够调用编译期还不存在的函数。
在C++中,在基类的成员函数声明前加上关键字virtual即可让该函数成为虚函数,派生类中对此函数的不同实现都会继承这一修饰符,允许后续派生类覆盖,达到迟绑定的效果。即便是基类中的成员函数调用虚函数,也会调用到派生类中的版本。