sytn.net
当前位置:首页 >> JAVA语音全面支持动态绑定?C++只对虚函数使用动态绑定,什么意思? >>

JAVA语音全面支持动态绑定?C++只对虚函数使用动态绑定,什么意思?

动态绑定就是指函数调用要到运行的时候才决定具体调用那个函数,静态绑定是指函数调用在编译时就确定要调用那个函数了.动态绑定允许程序动态改变函数的行为(执行的代码),所以动态绑定比静态绑定更灵活,但是动态绑定需要额外的时空开销,所以C++语言只允许虚函数使用动态绑定,java语言的设计思路不是最求高性能,所以Java语言的所有非static方法都是动态绑定的.

静态绑定是编译阶段已经决定,即编译阶段已经知道具体会调用哪个函数.虚函数都是动态绑定,它存在的目的是实现运行时绑定,即动态绑定.动态绑定时,编译器并不能具体知道该调用哪个函数,但是编译器知道通过什么办法来找到这个函数,也就是把决定调用哪个具体函数的时机留到运行时.这个办法是通过虚函数表来实现的编译阶段并不知道要调用哪个具体函数,但是能知道调用虚函数表的第几个函数,这样就达到了运行时绑定的目的.

你自己要明白虚函数是什么?(虚函数就是为了对象动态调用函数)我问你一句?构造函数执行之前,都没构造怎么会有对象,那怎么会对象调用构造函数.

Java的动态绑定Java的方法调用过程中,发生了这么些事情:编译器查看对象的声明类型和方法名(对象变量的声明类型).通过声明类型找到方法列表.编译器查看调用方法时提供的参数类型.如果方法是private、static、final或者构造器,编译器就可以确定调用那个方法了.这就是静态绑定.如果不是上述情况,就要使用动态绑定了.在程序运行时,采用动态绑定意味着:虚拟机将调用对象实际类型所限定的方法.下面将详细叙述动态绑定的过程:虚拟机提取对象的实际类型的方法表;虚拟机搜索方法签名;调用方法.

baidu.baidu://e.hiphotos.baidu.com/zhidao/pic/item/42a98226cffc1e171614e7e44d90f603728de9b8,编译器必需要保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证正确取到虚函数的偏移量).这意味着我们通过对象实例的地址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应的函数 . 1.动态绑定在函数调用时需要在虚函数表中查找,所以性能比静态函数调用稍低.2.通过基类类型的指针访问派生类自己的虚函数将发生错误. 任务elLF50BE79 | 发布于2016-05-28 评论

C++中,通过基类的引用或指针调用虚函数时,发生动态绑定.引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键.用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的.

我认识是对的.动态绑定的概念是在运行时(runtime),具体数据绑定到相应内存地址空间.虚函数的调用其目的就是让用户(调用者)重写其函数,在不同的运用场景表现出多态性.即编译时,我们无法得知具体的函数行为(静态),运行时,按照用户要求此虚函数引用到重写的“实”函数(动态).

Java语言是一个支持网络计算的面向对象程序设计语言.Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等.主要特性如下: 1、Java语言是简单的.Java语言的语法与

这样问得确不是很正确,语言没有开不开源的说法,语言只是提供给大家一种写代码要遵循的语法,当然这些语法肯定是公开的,不然大家怎么学呀.至于用java这个语法写的代码是否是开源的,那每个项目都不同,有开源的也有商业的;如果你想问的是java的基本类库是否开源,那答案是是的,你安装完jdk后目录下会有src.zip,里面就是源代码;如果你想问的是java运行时环境-jvm是否是开源的,那答案是不开源,是有版权的商业软件,最常用的jvm就是sun公司(现在是oracle公司)的sun jvm.你在oracle官网下载的jdk里包含的就是这个sun jvm

网站首页 | 网站地图
All rights reserved Powered by www.sytn.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com