一、函数名联编


将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编,在 编译过程完成的联编被称为静态联编

但是虚函数的存在使得静态联编比较困难,所以编译器必须生成能够在程序 运行时选择正确的虚函数的代码,称为动态联编

二、在c++中,动态联编与通过指针和引用调用的方法相关

三、将派生类的指针或者引用转换为基类指针或引用称为向上强制转换,可以不进行显示类型转换 base * pbase = &deriveobj;base & baseobj = deriveobj;

将基类指针或引用转换为派生类指针或引用,称为向下强制转换,必须要进行显示强制转换

derive * pderive = &base;//必须要强制转换

四、虚函数和动态联编

隐式向上强制转换使基类指针或引用可以指向基类对象或派生类对象,需要动态联编,c++使用虚函数来完成

总之,编译器对非虚方法使用静态联编,对虚函数使用静态联编

Base baseobj;Derive deriveobj;

Base * pbase;pbase = &deriveobj;

pbase->test(); // 如果test函数不是虚函数,那么将调用 Base :: test(),如果是虚函数,那么调用 Derive :: test(),具体代码参考虚函数

五、对比


静态联编的效率比较高,动态联编效率低。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐