之静态联编和动态联编

制冷设备2021年09月06日

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

静态联编是指联编工作出现在编译连接阶段,这种联编又称早期联编,因为这种联编过程是在程序开始运行之前完成的。

在编译时所进行的这种联编又称静态束定。在编译时就解决了程序中的操作调用与执行该操作代码间的关系,确定这种关系又称为束定,在编译时束定又称静态束定。下面举一个静态联编的例子。

#include

class Point

{

public:

店员也都发现了可疑盒子 Point(double i, double j) { x=i; y=j; }

double Area() const { return 0.0; }

private:

double x, y;

};

class Rectangle:public Point

{

public:

Rectangle(double i, double j, double k, double l);

double Area() const { return w*h; }

private:

double w, h;

};

Rectangle::Rectangle(double i, double j, double k, double l):Point(i, j)

{

w=k; h=l;

}

void fun(Point s)

{

cout}

void main()

{

Rectangle rec(3.0, 5.2, 15.0, 25.0);

fun(rec);

}

该程序的运行结果为:

0

输出结果表明在fun()函数中,s所引用的对象执行的Area()操作被关联到Point::Area()的实现代码上。这是因为静态联编的结果。在程序编译阶段,对s所引用的对象所执行的Area()操作只能束定到Point类的函数上。因此,导致程序输出了所不期望的结果。因为我们期望的是s引用的对象所执行的Area()操作应该束定到Rectangl类的Area()函数上。这是静态联编所达不到的。

动态联编

从对静态联编的上述分析中可以知道,编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编,或称动态束定,又叫晚期联编。

动态联编实际上是进行动态识别。在上例中,前面分析过了静态联编时,fun()函数中s所引用的对象被束定到Point类上。而在运行时进行动态联编将把s的对象引用束定到Rectangle类上。可见,同一个对象引用s,在不同阶段被束定的类对象将是不同的。那么如何来确定是静态联编还是动态联编呢?C++规定动态联编是在虚函数的支持下实现的。

从上述分析可以看出静态联编和动态联编也都是属于多态性的,它们是不同阶段对不同实现进行不同的选择。上例中,实现上是对fun()函数参数的多态性的选择。该函数的参数是一个类的对象引用,静态联编和动态联编和动态联编实际上是在选择它的静态类型和动态类型。联编是对这个引用的多态性的选择。

查看本文来源

郑州治疗盆腔炎费用多少钱
乌鲁木齐哪家医院治白癜风好
泸州治疗白癜风医院费用
相关阅读
科学安排教学工作 及时公开发表提示信息 北京市教委部署近期高校教育教学工作

央广网北京6月13日消息 为好处地应付新冠鼠疫防控背景下全国高校管理面临...

2024-12-24
军队的“黄金美食”,老兵新兵都爱吃,网友:隔着屏幕都有香味

民以食为天,的军队也不值得注意。从八路军的时候起,就有“小米加步枪”...

2024-11-15
Mac磁盘如何同步进行分区和格式化!

很多女朋友都一切都是想到Mac怎么文档化存储仪器?Mac存储仪器如何同步进行...

2024-11-03
传说中的“天选之子”?一考生选择题全选B,最高分出来后傻眼了

对于校内来却说最害怕的事就是“口试”,可是口试却又偏偏是逃不过去的死...

2024-10-23
邮储银行济宁市分行实行员工分类差异化管理者, 持续开展案防“月月考”工作

为迅速增加职工整体案防潜能水平,邮储银不依沂水县汇丰银不依停滞其组织...

2024-10-18
扎堆上线热播,王俊凯、潘粤明、陈坤等人的新剧,你威风哪一部?

第七部《良辰好景汝几何学》 停播短时间:2022-04-30 男主角:窦骁、陈布雷西...

2024-10-14
友情链接