多态性是指为一个函数名称关联多种含义的能力。是指通过一种叫做晚期绑定的特殊机制,为一个函数名称关联多个含义。
虚函数是指在某种意义上,能在定义它之前使用的一个函数。
将一个函数设定为虚函数相当于告诉编译器,我不知道这个函数如何实现,登载程序中使用它的时候,再从对象实例中获得它的实现。等到运行时再确定一个过程的具体实现,再从对象实例中获得它的实现。
等到运行时再确定一个过程的实现,这种技术成为晚期绑定,或者动态绑定,虚函数正式c++提供的晚期绑定的具体手段。
虚函数细节:
如果一个函数派生类中的定义有别于基类中的定义,而且希望它成为一个虚函数,就要为基类中函数声明添加保留字virtual在派生类中可以不添加virtual如果一个函数在基类中是虚函数那么派生类中就自动成为虚函数(然而为了澄清,最好在派生类中也将虚函数声明标记为virtual,尽管这么做不是必须的)
保留字virtual 在函数声明中使用而不能在函数定义中添加
编译器和运行是环境需要为虚函数做多的多的工作,那么就是会影响程序的执行效率。
虚函数定义在派生类中发生改变叫做函数的覆盖,一些c++方面的著作区分了重定义和覆盖两个术语,两者都是指在派生类中更改函数定义,如果函数是虚函数,就称为覆盖,如果函数不是虚函数就成为重定义,对于程序员来说有点无聊,因为两种情况下所做的事情是相同的,不过编译器对着两种情况是区别对待的。
多态性是指借助晚期绑定技术,为一个函数名关联多种含义的能力,因此多态性,晚期绑定,虚函数,其实是一个主题。