永发信息网

c++里面什么时候用到动态联编(绑定),什么时候用到静态联编

答案:1  悬赏:50  手机版
解决时间 2021-04-14 04:55
c++里面什么时候用到动态联编(绑定),什么时候用到静态联编
最佳答案

联编是指一个计算机程序自身彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 静态联编 静态联编是指联编工作出现在编译连接阶段,这种联编又称早期联编,因为这种联编过程是在程序开始运行之前完成的。 在编译时所进行的这种联编又称静态束定。在编译时就解决了程序中的操作调用与执行该操作代码间的关系,确定这种关系又称为束定,在编译时束定又称静态束定。下面举一个静态联编的例子。


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


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
宿舍里有老鼠,有什么办法能把它赶走啊?
宽带欠费长时间不交会怎样?
有没有很安静但又不伤感的歌
I dont know why youre so concerned—it isn
我是联通3h手机变成4g流量后标识不会换么
关于鹅的迷语
游戏赤壁的魂之战神卡在哪弄的啊 ?
国防东道/增盛路(路口)地址在哪,我要去那里
对教官最好的称呼
男柔道使用什么武器,现在柔道最好用的武器是
一个二斤多的土豆正常吗
狗狗搜索电子书下载
微信公众号图文消息,怎么加入红包
中国最漂亮的大学是哪个?
电信3G无线上网上段时间后掉线就连不上了是怎
推荐资讯
临沂瑞钢联管业有限公司生产的无缝钢管质量怎
非转农后,社保和医保会影响吗
COn December 22, 1775, two of Washington’
烽火战国开通点亮了吗?帮帮忙解答解答
“洪学”是什么?
DNF游戏运行的过程中不可以在运行其他的游戏
吉奥文化广告传媒有限公司怎么去啊,有知道地
毁誉参半的《赤壁》上映后,有人批评影片处处
烧录卡是什么概念?和内存卡有什么区别?
电脑显卡Ati是哪个品牌的缩写
今年最流行什么
淘宝删除订单有什么用,把淘宝里的地址删了之
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?