c++ 多态
c++的多态完全由指针实现的设计技巧,在汇编的角度,下面两种写法完全相同,这意味着,多态只是一种合法的类型转换。

但凡类型转换,往往就存在这某种隐患。为什么多态就是合法的类型转换呢?
这是由类在内存中的数据结构决定的。如果存在虚函数,在继承类B中,增加的变量会被追加到原始变量之后,虚函数表的地址会被换成B自有的。我们在B类中使用基类A的成员函数,和在A中使用自有函数没什么不同,变量的指针偏移量都是一样的。(A的成员函数只会存一份,提高代码复用)

虚函数
在上边的例子中,我们只能将B类降级为A类使用。因为我们没有在A类中指定处理变量 (int z;) 的方法。我们可以在A中设置虚函数,这样哪怕B的指针在指向A时也可以调用A的vfunc函数。这就是多态的精髓,调用相同的函数名,却会根据调用对象自身的类型来执行不同的函数实现。

评论区