动态绑定和静态绑定

绑定指的是把方法名和对应的方法联系在一起。什么时候需要绑定呢?

  1. 方法有重载时。因为有多个同名方法,所以根据参数列表确定是哪个方法。是为静态绑定
  2. 方法有重写时。子类对父类的方法进行了重写。当用父类的指针调用某个方法时,要确定到底调用的是哪个类的方法。是为动态绑定。

要理解,先要说下对象的内存模型

对象中有段空间是用来保存类信息的,其中就有函数表的指针。函数表是个什么东西?可以理解为在编译阶段类的方法被编译放在一段内存中。而且会生成一个方法表(可以把它理解成一个数组),表里面依次保存着方法的指针。比如有三个重载的方法,他们在表里的位置为 1,2 ,3。那么在编译阶段就会根据参数列表发生静态绑定,比如说绑定到 2。这时编译器是不管这个 2 是父类的 2,还是子类的 2 的。而子类的方法和父类的同名同参数列表的方法在方法表中的顺序是一样的。在运行时,从对象的函数表里去取相应的函数。这时才发生了最终的绑定,也可以说动态绑定。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 你不应该重新定义一个继承而来的non-virtual函数。为继承而来的virtual函数,重新定义缺省参数值,也很...
    何幻阅读 949评论 0 0
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,592评论 33 466
  • 一直以来我们都错误的把爱情看得太重,那么既然爱情并非不可或缺,我们该对爱情持一种什么样的态度最好呢?徐志摩有一段...
    曼今阅读 5,972评论 3 6
  • 火耳儿阅读 221评论 0 0