一、函数名联编
但是虚函数的存在使得静态联编比较困难,所以编译器必须生成能够在程序 运行时选择正确的虚函数的代码,称为动态联编
二、在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(),具体代码参考虚函数
五、对比