导航:首页 > 源码编译 > 动态联编是在编译时确定操作系数

动态联编是在编译时确定操作系数

发布时间:2022-10-28 23:03:56

❶ 浅谈静态联编和动态联编的区别和实现动态联编的

联编是指一个程序自身彼此关联的过程。按照联编所进行的阶段不同,可分为静态联编和动态联编。
静态联编又称静态绑定,指在调用同名函数(即重载函数)时编译器将根据调用时所使用的实参在编译时就确定下来应该调用的函数实现。它是在程序编译连接阶段进行联编的,这种联编又称为早期联编,这是因为这种联编工作是在程序运行之前完成的。它的优点是速度快,效率高,但灵活性不够。
编译时所进行的联编又称为静态束定。束定是指确定所调用的函数与执行该函数代码之间的关系。
动态联编也称动态绑定,是指在程序运行时,根据当时的情况来确定调用的同名函数的实现,实际上就是在运行时选择虚函数的实现。这种联编又称为晚期联编或动态(束定。实现条件:①要有继承性且要求创建子类型关系;)②要有虚函数;③通过基类的对象指针或引用访问虚函数。继承是动态联编的基础,虚函数是动态联编的关键,虚函数经过派生之后,在类族中就可以实现运行过程中的多态。动态联编要求在运行时解决程序中的函数调用与执行该函数代码间的关系,调用虚函数的对象是在运行时确定的。对于同一个对象的引用,采用不同的联编方式将会被联编到不同类的对象上。即不同联编可以选择不同的实现,这便是多态性。它的优点是灵活性强,但效率较低。

❷ 谁知道C++语言的精髓

C++主要在C的基础上凸显了类的概念。
C++的特点:封装、继承、多态。

封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

继承:继承是指一个对象直接使用另一对象的属性和方法。
C++的继承方式有三种:public公有继承、protected保护继承、private私有继承,默认为private继承。

多态:指同一个实体同时具有多种形式。
C++中,实现多态有以下方法:虚函数,抽象类,重载,覆盖,模版。

在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。

静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运行之前完成的,又称为早期联编。要实现静态联编,在编译阶段就必须确定程序中的操作调用(如函数调用)与执行该操作代码间的关系,确定这种关系称为束定,在编译时的束定称为静态束定。静态联编对函数的选择是基于指向对象的指针或者引用的类型。其优点是效率高,但灵活性差。它的方式有:重载和模板。

动态联编是指联编在程序运行时动态地进行,根据当时的情况来确定调用哪个同名函数,实际上是在运行时虚函数的实现。这种联编又称为晚期联编,或动态束定。动态联编对成员函数的选择是基于对象的类型,针对不同的对象类型将做出不同的编译结果。动态联编的优点是灵活性强,但效率低。他的方式有:虚函数和多态。

C++中一般情况下的联编是静态联编,但是当涉及到多态性和虚函数时应该使用动态联编。

❸ C++多态性的一道经典例题

这个例子一般在很多教材上都可以找的。
要求大概不是让你运行后生成某一个图形,模拟一下而已~
多态 有编译时的多态(静态联编,即编译时确定操作对象) 和 运行时的多态(动态联编,即运行时确定操作对象),而虚函数是实现动态联编的基础。

继承是实现代码重用 而 多态 是实现 接口重用,接口是最有价值的资源,设计接口需要耗费更昂贵的人力和时间。

举个简单的例子:
飞机是一个总成,它可以派生出 客机,直升机 。
所以可以设计 一个基类 “飞机” 然后公有派生出 “客机” “直升机”

飞机都可以起飞,所以在基类“飞机”中设计一个 虚函数 fly(),显然“客机”和“直升机”有不同的起飞方式,所以,在“客机”和“直升机”中
继承来的fly()函数应当是不同的,即相同的函数有不同的实现。

然后假设用 “飞机”生成一个指针型的对象 *p,“客机”“直升机”也分别生成各自的对象, 把“客机”的对象赋给*plan,则用plan调用fly(),则按照客机的起飞方式起飞,把“直升机”的对象赋给*plan,用plan调用fly()则按照直升机起飞的方式 起飞。

所以多态是允许你将父对象设置成为一个或更多的它的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

❹ C++关于动态联编

动态联编其实也就是动态多态性,它是通过基类指针和虚函数实现的,即先定义一个基类指针,然后通过基类指针指向不同的类对象,调用对应的虚函数。
例如:
void main()
{ A a; //定义类A对象a
B b; //定义类B对象b
C c; //定义类C对象c

A *p;//定义一个基类指针p
p=&a; //基类指针p指向基类A的对象a
p->my(); //此时调用的是基类A的my()函数

p=&b; //基类指针p指向类B的对象b
p->my(); //此时基类指针p调用的是类B的my()函数

p=&c; //基类指针p指向类C的对象c
p->my(); //此时基类指针p调用的是类C的my()函数
}

❺ C++中“析构函数中调用虚函数采用静态联编”为什么正确

在构造函数和析构函数中调用虚函数,编译系统对构造函数和析构函数中调用虚函数采用静态联编,因为它们所调用的虚函数是自己的类,或者基类中定义的函数而不是在任何派生类中重定义的函数。所有这句话说的是正确的。

下面介绍一些相关知识:
什么是静态联编:
即在编译过程中进行联编被称为静态联编(static binding),又称为静态绑定、早期联编。

什么是动态联编:
即编译器必须能够在程序运行时选择正确的函数的代码,这被称为动态联编(dynamic binding),又称为动态绑定、晚期联编。

什么是虚函数:
虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用基类型别的指针指向其派生类的实例,然后通过基类的指针调用实际派生类的成员函数(基类指针可调用同名覆盖方法)。这种技术可以让基类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。

❻ 动态联编是在运行时选定调用的成员函数的

是的,你可以使用静态编译和动态编译后反汇编比较一下!

❼ 如果派生类中没有对基类的虚函数进行重定义,则它继承基类中的()

D

D
动态联编是指函数编译时先不确定具体调用一个继承函数链上的哪一个函数,而留到程序执行时再决定,这样编译时在函数调用的地方就要多保存一个函数地址的链表(或类似结构),执行函数时也多了一个判断具体调用哪一个函数的过程,效率当然比普通的静态联编来得低

❽ c++ 静态关联和动态关联是什么意思

1,如果是通过对象名调用虚函数,在编译阶段就能确定调用的是哪一个类的虚函数,所以属于静态关联。
2,如果通过基类指针调用虚函数,如pt=&point;pt->shapeName();,在编译阶段无法从语句本身确定调用哪一个类的虚函数,只有在运行时,pt指向某一个类对象之后,才能确定调用的是哪一个类的虚函数,故为动态关联。

❾ 联编的动态联编

动态联编又称动态关联、动态束定、后期联编、晚期联编。
动态联编是指编译程序在编译阶段并不能确切地知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切地知道将要调用的函数,要求联编工作在程序运行时进行,这种在程序运行时进行的联编工作被称为动态联编。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;}这就是动态联编,编译器在程序运行时才知道这个函数的具体作用。

阅读全文

与动态联编是在编译时确定操作系数相关的资料

热点内容
不能修改的pdf 浏览:737
同城公众源码 浏览:475
一个服务器2个端口怎么映射 浏览:283
java字符串ascii码 浏览:62
台湾云服务器怎么租服务器 浏览:462
旅游手机网站源码 浏览:317
android关联表 浏览:930
安卓导航无声音怎么维修 浏览:322
app怎么装视频 浏览:424
安卓系统下的软件怎么移到桌面 浏览:81
windows拷贝到linux 浏览:757
mdr软件解压和别人不一样 浏览:889
单片机串行通信有什么好处 浏览:325
游戏开发程序员书籍 浏览:849
pdf中图片修改 浏览:275
汇编编译后 浏览:480
php和java整合 浏览:835
js中执行php代码 浏览:447
国产单片机厂商 浏览:62
苹果手机怎么设置不更新app软件 浏览:289