码迷,mamicode.com
首页 > 编程语言 > 详细

c++晚捆绑的实现机制

时间:2016-05-23 19:21:51      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:晚绑定   早绑定   

 早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。

      晚绑定(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的大小没有发生改变,所以可以推出上述的结论。

本文出自 “fun” 博客,请务必保留此出处http://10725723.blog.51cto.com/10715723/1782205

c++晚捆绑的实现机制

标签:晚绑定   早绑定   

原文地址:http://10725723.blog.51cto.com/10715723/1782205

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!