虚函数是 C++ 实现多态的方式。
- 什么是多态?
多态性常被视为自封装和继承之后,面向对象的编程的第三个支柱。
如果举一个简单的例子,比如有动物(Animal)之类别(Class),而且由动物继承出类别鸡(Chicken)和类别狗(Dog),并对同一源自类别动物(父类别)之一消息有不同的响应,如类别动物有“叫()”之动作,而类别鸡会“啼叫()”,类别狗则会“吠叫()”,则称之为多态。
根据维基百科上所解释,多态可定义为,“一种将不同的特殊行为和单个泛化记号相关联的能力”,是指计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作称之。
虚函数是动态多态,在运行时决定,只有在程序运行时才决定调用基类的还是子类的,系统会根据基类指针所指向的对象来决定要调用的函数。
-
如何声明虚函数?
在声明前加上virtual关键字来声明虚函数。在父类中声明,在子类中做具体实现。 -
什么是纯虚函数?
纯虚函数是在声明虚函数时赋值为0的函数,使用这种声明方式后,继承类必须对该虚函数做实现。 -
虚函数是如何实现的?
通过虚表来实现的。每个对象里有虚表指针,指向虚表。虚表实质上是一个数组而不是什么链表。虚函数的地址按照声明顺序依次存放在虚表中。
网友评论