侧边栏壁纸
博主头像
赵东阳的个人网站

行动起来,活在当下

  • 累计撰写 20 篇文章
  • 累计创建 8 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
C++

c++ 知识整理——多态的实现

温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

c++ 多态

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

image.png

但凡类型转换,往往就存在这某种隐患。为什么多态就是合法的类型转换呢?

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

image.png

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

0

评论区