课程咨询 :025-84640158

  • c++晚捆绑的实现机制

    发布:南京C++培训      来源:达内新闻      

  • 关于C++中的早绑定和晚绑定机制你了解吗?下面听达内南京C++培训老师为你介绍:

    早绑定(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;

    }

上一篇:C++内联函数与宏的区别

下一篇:南京C++培训:智能指针的简单实现

最新开班日期  |  更多

c++--零基础全日制班

c++--零基础全日制班

开班日期:04-28

c++--零基础周末班

c++--零基础周末班

开班日期:04-28

c++--高薪就业班

c++--高薪就业班

开班日期:04-28

c++--免费训练营

c++--免费训练营

开班日期:04-28

  • 地址:南京市玄武区洪武北路121号苏苑大厦5楼
  • 课程培训电话:025-84640158     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56