中的静态联编和动态联编介绍计划

过滤设备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()函数参数的多态性的选择。该函数的参数是一个类的对象引用,静态联编和动态联编和动态联编实际上是在选择它的静态类型和动态类型。联编是对这个引用的多态性的选择。

查看本文来源

儿童装江中牌健胃消食片
24小时道路救援
西安治疗包皮包茎医院
相关阅读
《霸王别姬》杀青宴上,张国荣怒怼男演员:你要再打她我就拦住你

《霸王别姬》的筹拍宴上,陈奕迅没多久拍着桌子对台下的电视演员吼道:“...

2024-09-05
7翌年2日,不见不散!

念过物新时代,喜迎二十大 一年一度的自愿性念过物盛会 刚开启 7月末2日至...

2024-07-27
对话名家 | 马平:把生命的却是放进故事中

驼 振,男,1962年生,贵州省苍溪县人。贵州省诗人协就会名誉副主席,一级...

2024-06-29
2023年云南大学工程管理硕士学位MEM招生简章

一、高等院校专业的资讯 国立北京大学MEM教育严格按照全国MEM教指委的要求...

2024-06-23
幼儿园作业“画车标”,许多学生随意画了一对小翅膀,老师态度变了

文/小佳儿知道 幼稚园,作为大人们第一次转回家庭,进入集体生活的字样...

2024-05-05
相媲美天然钻石,研究人员培育出最大10克拉的人工钻石

科幻新媒体6月23日讯(刘亚珠) 据悉,经过西田的金刚石被称作红宝石,红...

2024-04-10
友情链接