C++的虚函数,动态(运行期)多态性是不是一个多此一举的不必要的设计?
1. C++的设计者为什么要设计运行期多态性?既然"对象.类::成员函数()"这个形式能解决问题,C++的设计者为什么要设计一个多此一举的运行期多态性?
2. 运行期多态性似乎是一种“假动态”,众所周知,非虚函数的调用指令,在程序被编译链接后,其调用指令包含一个链接器链接的“常量”地址,该“常量”地址就是此非虚函数的静态地址,这是所谓的静态的编译期的多态性,而动态的运行期多态性就真的是动态的吗?所谓的运行期多态性,无非就是在类的对象被构造时,编译链接器,或者装载器为对象构造一个虚函数表指针成员变量,此指针成员变量对外不可访问,此指针指向此对象的类族的虚函数表,而虚函数表中的一个个的虚函数实质上还是一个个静态的地址,只不过是通过一个中间指针,间接的调用,这样就变成动态的?这是一种假动态?
3. 在实际的社会生产生活应用中,有没有什么实际的例子,实际的问题,必须不得不由虚函数出马来解决才能完成,而"对象.类::成员函数()"这样的形式是完成不了的实际的问题呢?大家有没有遇到过这样的问题呢?