继承和动态绑定对程序的编写有两方面的影响:
使用继承,我们可以更容易地定义与其他类相似但不完全相同的新类;
使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。
—————————————————————————————————————————————————
通过使用动态绑定,我们能用同一段代码分别处理基类和派生类们的对象。在C++语言中,当我们使用基类的引用(或指针)调用一个虚函数时将发生动态绑定。动态绑定,又称运行时的绑定,顾名思义,即在程序运行时选择调用哪个版本(对象)的虚函数。
有虚函数,程序就可以在运行阶段做决定到底选择哪个版本的虚函数;没有虚函数,程序就会在编译阶段静态绑定(不做选择)。那个为什么要大费周章地使用动态绑定、使用虚函数呢?这样是为了能使用同一段代码(一个函数,函数的形参有基类的引用或指针),用来处理很多的类(基类和其派生类们)的对象。
设想一下,如果没有虚函数,每个基类的派生类都定义自己独立的net_price(返回书籍的实际销售价格的成员函数),那么就不可能设计同一段代码(同一个函数)来调用所有的类的对象的net_price(类外函数的形参是设成基类的引用(或指针)呢?还是哪个派生类的引用(或指针)呢?)
所以通过继承和动态绑定(使用虚函数)这两大法宝,可以实现以统一的方式,自如地调用各种类的对象,使我们能够编写具有特定类型行为但又独立于类型的程序。这种统一的美学,是必须要追求的。
注:在C++中,动态绑定只