虚函数

虚函数与纯虚函数

虚函数

基类希望派生类进行覆盖的函数.
当我们使用指针或引用调用虚函数时,该调用将被动态绑定.
更具体而言,使用基类的引用或指针调用一个虚成员函数时会执行动态绑定.
只有使用引用更或者指针调用虚函数时才会发生动态绑定.
每一个虚函数都必须提供定义,无论是否用到.

纯虚函数

纯虚函数无须定义;
可以为纯虚函数提供定义,但是函数体必须定义在类的外部.
含有纯虚函数的类是抽象基类,无法被实例化.

静态类型与动态类型

一个变量或表达式的静态类型与该表达式表示对象的动态类型必须区分开来.
表达式的静态类型和动态类型比较

静态类型 动态类型
变量声明时的类型或表达式生成的类型 变量或表达式表示的内存中的对象的类型
编译时已知 运行时才知道

指针或引用的静态类型和动态类型可能不一致;
若表达式既不是引用也不是指针,则它的动态类型和静态类型一致.