天下

记录修行的印记

C++语言的动态联编技术剖析

联编的概念
    在C++中,联编(binding)就是使一个计算机程序的不同部分彼此关联的过程.
在这个过程中对将每个函数调用分配内存地址,并且对外部访问也分配正确的内存地址,根据进行联编所处阶段的不同,可以分为两种不同的联编方法:静态联编和动态联编(滞后联编).

在编译阶段决定执行哪个同名的被调用函数,称为静态联编.
静态联编在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型.

反之在编码阶段不能决定执行哪个同名的被调用函数,只在执行阶段才能根据地要处理的对象类型来决定执行哪个类的成员函数,这称为动态联编.
动态联编对成员函数的选择不是基于指针或引用,而是基于对象类型,针对不同的对象类型将作出不同的编译结果.
当涉及到多态性和虚函数时就应该使用动态联.

动态联编必须包括以下方面:
成员函数必须申明为virtual
如果基类中申明了为虚函数,则派生类中不必再申明。

调用方式:
通过对象的指针或引用调用成员函数;或通过成员函数调用

C++多态性机制
多态性在C++里面具体表现为:通过基类指针访问派生类的函数和方法.

代码如下:
#include   <iostream>
#include   
<typeinfo>
using namespace std;
class   A
{
public:
    
virtual   void   fun(void)
    {
        cout 
<< "This   is   class   A! " <<endl;
    }
};
class   B   :   public   A
{
public:
    
void   fun(void)
    {
        cout 
<< "This   is   class   B! " <<endl;
    }
};
int main(void)
{
    A   aa,
*p;
    B   bb;
    p
=&bb;
    p
-> fun();
    p
=&aa;
    p
-> fun();
    
return 0;
}


posted on 2010-10-27 09:12 天下 阅读(508) 评论(0)  编辑 收藏 引用 所属分类: C++必杀技法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(4)

随笔分类(378)

随笔档案(329)

链接

最新随笔

搜索

最新评论