早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。
创新互联拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕10年,专业且经验丰富。10年网站优化营销经验,我们已为1000多家中小企业提供了网站制作、成都网站建设解决方案,按需网站制作,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!
晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。
早绑定的优点是:
(1) 编译效率 高
(2) 有代码提示
(3) 编译时类型检查
晚绑定的优点是:
(1) 不用申明类型
(2) 对象类型可以随时更改
virtual关键字可以告诉编译器实行的是晚捆绑(虚函数)。
为了实现晚捆绑,典型的编译器对每个包含虚函数的类将创建一个表(VTABLE),在VTABLE中放着特定类的虚函数地址。在每个带有虚函数的类中,编译器会放置一个指针VPTR,指向这个对象的VTABLE。当通过基类指针做虚函数调用时,编译器静态的插入能取得这个VPTR并在VTAVLE表中查找函数地址的代码,这样就会引起晚捆绑的发生。
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class NoVirtual { public: void fun() {} int ret() {} private: int a; }; class OneVirtual { public: virtual void fun() {} int ret() {} private: int a; }; class TwoVirtual { public: virtual void fun() {} virtual int ret() {} private: int a; }; void test() { cout << "sizeof(int):" << sizeof(int) << endl; cout << "sizeof(NoVirtual):" << sizeof(NoVirtual) << endl; cout << "sizeof(OneVirtual):" << sizeof(OneVirtual) << endl; cout << "sizeof(TwoVirtual):" << sizeof(TwoVirtual) << endl; } int main() { test(); system("pause"); return 0; }
由于类Onevirtual和类Twovirtual的大小没有发生改变,所以可以推出上述的结论。
当前文章:c++晚捆绑的实现机制
本文路径:https://www.cdcxhl.com/article46/iihphg.html
成都网站建设公司_创新互联,为您提供商城网站、静态网站、电子商务、品牌网站制作、网站内链、网站制作
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联