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;
}
#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 天下 閱讀(525) 評論(0) 編輯 收藏 引用 所屬分類: C++必殺技法