靜態聯編和動態聯編

2021-07-23 03:25:41 字數 3430 閱讀 9124

聯編就是將模組或者函式合併在一起生成可執行**的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。

靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯編也叫早繫結,在編譯階段就必須了解所有的函式或模組執行所需要檢測的資訊,它對函式的選擇是基於指向物件的指標(或者引用)的型別,c語言中,所有的聯編都是靜態聯編,據我所知道的,任何一種編譯器都支援靜態聯編(廢話)。

動態聯編是指在程式執行的時候才將函式實現和函式呼叫關聯,因此也叫執行時繫結或者晚繫結,動態聯編對函式的選擇不是基於指標或者引用,而是基於物件型別,不同的物件型別將做出不同的編譯結果。c++中一般情況下聯編也是靜態聯編,但是一旦涉及到多型和虛函式就必須要使用動態聯編了。下面將介紹一下多型。

多型:字面的含義是具有多種形式或形態。c++多型有兩種形式,動態多型和靜態多型;動態多型是指一般的多型,是通過類繼承和虛函式機制實現的多型;靜態多型是通過模板來實現,因為這種多型實在編譯時而非執行時,所以稱為靜態多型。

動態多型例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

#include

#include

/**

*shape

*/

classcshape

virtual~cshape(){}

virtualvoiddraw() = 0;

};

/**

*point

*/

classcpoint :publiccshape

~cpoint(){}

voiddraw()

};

/**

*line

*/

classcline :publiccshape

~cline(){}

voiddraw()

};

voidmain()

大家可以考慮一下它的輸出結果,如果實在不知道,那就麻煩你執行一下它吧!

順便在這裡也提供乙個靜態多型的例子:

在上面例子的基礎之上新增模板函式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

template<classt>

voiddrawshape(t* t)

修改main函式為如下:

voidmain()

在程式編譯main函式的時候,編譯器就已經指定了drawshape函式裡面的draw要呼叫那個實現了,這就是靜態多型,在編譯時就已經知道了要呼叫的函式。

靜態聯編和動態聯編

聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...

靜態聯編和動態聯編

聯編就是將模組或者函式合併在一起生成可執行 的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯...

靜態聯編和動態聯編

聯編 將源 中的函式呼叫解釋為執行特定 塊稱為函式名聯編。靜態聯編 在編譯過程中進行聯編。動態聯編 編譯器生成能在程式執行期間選擇正確的虛方法的 稱為動態聯編。因為只有在執行期間,才知道函式選那種型別的物件。將派生類引用或指標轉換為基類引用或指標成為向上強制轉換,派生類繼承了基類物件的所有資料成員和...