收藏 分销(赏)

C++中的静态联编和动态联编介绍.docx

上传人:a199****6536 文档编号:6456530 上传时间:2024-12-08 格式:DOCX 页数:3 大小:12.32KB 下载积分:5 金币
下载 相关 举报
C++中的静态联编和动态联编介绍.docx_第1页
第1页 / 共3页
C++中的静态联编和动态联编介绍.docx_第2页
第2页 / 共3页


点击查看更多>>
资源描述
C++中的静态联编和动态联编介绍 { 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 fun(rec); } 该程序的运行结果为: 0 输出结果说明在fun()函数中,s所引用的对象执行的Area()操作被关联到Point::Area()的实现代码上。这是由于静态联编的结果。在程序编译阶段,对s所引用的对象所执行的Area()操作只能束定到Point类的函数上。因此,导致程序输出了所不期望的结果。由于我们期望的是s引用的对象所执行的Area()操作应当束定到Rectangl类的Area()函数上。这是静态联编所达不到的。 动态联编 从对静态联编的上述分析中可以知道,编译程序在编译阶段并不能准确知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要准确知道该调用的函数,要求联编工作要在程序运行时进展,这种在程序运行时进展联编工作被称为动态联编,或称动态束定,又叫晚期联编。 动态联编实际上是进展动态识别。在上例中,前面分析过了静态联编时,fun()函数中s所引用的对象被束定到Point类上。而在运行时进展动态联编将把s的对象引用束定到Rectangle类上。可见,同一个对象引用s,在不同阶段被束定的类对象将是不同的。那么如何来确定是静态联编还是动态联编呢?C++规定动态联编是在虚函数的支持下实现的。 从上述分析可以看出静态联编和动态联编也都是属于多态性的,它们是不同阶段对不同实现进展不同的选择。上例中,实现上是对fun()函数参数的多态性的选择。该函数的参数是一个类的对象引用,静态联编和动态联编和动态联编实际上是在选择它的静态类型和动态类型。联编是对这个引用的多态性的选择。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服