Advertisement

C++ 为什么要使用继承?为什么要使用动态绑定?为什么要使用虚函数?

阅读量:

继承和动态绑定对程序的编写有两方面的影响:
使用继承,我们可以更容易地定义与其他类相似但不完全相同的新类;
使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。
—————————————————————————————————————————————————
通过使用动态绑定,我们能用同一段代码分别处理基类和派生类们的对象。在C++语言中,当我们使用基类的引用(或指针)调用一个虚函数时将发生动态绑定。动态绑定,又称运行时的绑定,顾名思义,即在程序运行时选择调用哪个版本(对象)的虚函数。

具备实现多个分支功能的需求,程序可以在运行时根据具体情况选择调用哪一个实现版本;如果缺乏这种能力,则只能在编译时将对象直接绑定到已定义好的成员中无法灵活切换。那么为什么要采用动态绑定机制而放弃静态绑定原则呢?这是因为通过这种方式可以利用一段通用代码(即一个带有参数类型引用或指针的目标函数)来高效处理多种不同对象(涉及基类及其派生类的对象)。

假设没有采用虚函数的情况下,则所有子类必须各自实现独立版本计算实际售价的方法。这样就无法通过单一代码段(统一功能模块)来统一调用各个对象的方法(其中参数类型应设定为基于基类引用或者具体某个派生类对象呢?)

因此利用继承与动态绑定(借助虚函数)这两个关键手段可以使我们得以采用统一的方式自然地访问各类对象从而编纂具有特定行为却又不依附于类型的过程这种和谐的整体性是不可忽视的

在C++语言中,只有当函数声明为纯虚函数时,通过参数传递的方式实现动态绑定才是有效的。

该引用 item 属于基体。
该引用 bulk 属于派生于 Base 的体。
变量 p 是一个指向 item 的指针。
变量 p 指向 Bulk 对象所对应的体。
引用 r 是一个基于 Bulk 派生于 Base 的体。

这种转换一般被称为从派生类到基类的类型转换。另一种表述是说我们可以将派生类的对象视作基类的对象来进行使用。

全部评论 (0)

还没有任何评论哟~