‘壹’ 动态联编是在运行时选定调用的成员函数的
是的,你可以使用静态编译和动态编译后反汇编比较一下!
‘贰’ 浅谈静态联编和动态联编的区别和实现动态联编的
联编是指一个程序自身彼此关联的过程。按照联编所进行的阶段不同,可分为静态联编和动态联编。
静态联编又称静态绑定,指在调用同名函数(即重载函数)时编译器将根据调用时所使用的实参在编译时就确定下来应该调用的函数实现。它是在程序编译连接阶段进行联编的,这种联编又称为早期联编,这是因为这种联编工作是在程序运行之前完成的。它的优点是速度快,效率高,但灵活性不够。
编译时所进行的联编又称为静态束定。束定是指确定所调用的函数与执行该函数代码之间的关系。
动态联编也称动态绑定,是指在程序运行时,根据当时的情况来确定调用的同名函数的实现,实际上就是在运行时选择虚函数的实现。这种联编又称为晚期联编或动态(束定。实现条件:①要有继承性且要求创建子类型关系;)②要有虚函数;③通过基类的对象指针或引用访问虚函数。继承是动态联编的基础,虚函数是动态联编的关键,虚函数经过派生之后,在类族中就可以实现运行过程中的多态。动态联编要求在运行时解决程序中的函数调用与执行该函数代码间的关系,调用虚函数的对象是在运行时确定的。对于同一个对象的引用,采用不同的联编方式将会被联编到不同类的对象上。即不同联编可以选择不同的实现,这便是多态性。它的优点是灵活性强,但效率较低。
‘叁’ 联编的动态联编
动态联编又称动态关联、动态束定、后期联编、晚期联编。
动态联编是指编译程序在编译阶段并不能确切地知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切地知道将要调用的函数,要求联编工作在程序运行时进行,这种在程序运行时进行的联编工作被称为动态联编。C++规定:动态联编是在虚函数的支持下实现的。
动态联编必须包括以下方面:
1、成员函数必须声明为virtual
2、如果基类中声明了为虚函数,则派生类中不必再声明。
调用方式:
通过对象的指针或引用调用成员函数,或通过成员函数调用,反之就无法实现动态联编。 #include<iostream>#include<string>usingnamespacestd;classCBuilding{//定义建筑类stringname;//定义名称public:voidset(stringstrName);//修改名称virtualvoiddisplay()//显示信息,这里是内联函数,而且声明为虚函数{cout<<建筑是<<name<<
;}};//建筑类定义完毕voidCBuilding::set(stringstrName){//修改名称方法的实现name=strName;}classCBridge:publicCBuilding{//通过继承来定义桥类floatlength;//定义长度public:voidsetLength(floatl=0.0){length=l;}//设置长度voiddisplay(){CBuilding::display();//调用基类方法显示名称cout<<其长度是<<length<<米。
;//显示长度信息}};//桥类定义完毕voidmain(){CBuildingbuilding;//创建建筑对象CBridgebridge;//创建桥对象building.set(中国古代建筑);//设置名称building.display();//显示信息bridge.set(中国赵州桥);//设置桥的名称bridge.setLength(static_cast<float>(60.40));//修改桥的长度bridge.display();//显示桥的信息return;}这就是动态联编,编译器在程序运行时才知道这个函数的具体作用。