c++中基类指针指向派生类时,调用的虚函数是派生类的。那为何不直接用派生类的对象来调用就行了,设计虚函数的真正意图是什么?
直接用派生类的对象是可以的,但是虚函数的作用体现在多态上。在实际编程中,往往不直接通过派生类对象来调用其成员函数,而是通过一个指向派生类对象的指针(或引用)来调用其成员函数。这在面向对象编程中非常常见。
其好处是:通过这个基类指针或者引用来调用虚函数的时候,实际执行的是派生类对象的函数,使用这个指针或者引用的一方的代码不必随着派生类的不同而改变,却可以达到执行最适合这个派生类的函数(也就是这个派生类自己的成员函数)的目的;
另一方面可以使程序模块具有很好的可替换性,用一个派生类替换另一个派生类,程序的其它部分不需要做任何改动就可以正常运行而且发挥出新的派生类的特性。 tip:从底层往上访问,而非从顶层往下执行。
另一方面可以使程序模块具有很好的可替换性,用一个派生类替换另一个派生类,程序的其它部分不需要做任何改动就可以正常运行而且发挥出新的派生类的特性。 tip:从底层往上访问,而非从顶层往下执行。
下面举个例子: