一、概述:
通常來說聯編就是將模塊或者函數合并在一起生成可執行代碼的處理過程,同時對每個模塊或者函數調用分配內存地址,并且對外部訪問也分配正確的內存地址,它是計算機程序彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。
靜態聯編是指在編譯階段就將函數實現和函數調用關聯起來,因此靜態聯編也叫早綁定,在編譯階段就必須了解所有的函數或模塊執行所需要檢測的信息,它對函數的選擇是基于指向對象的指針(或者引用)的類型,C語言中,所有的聯編都是靜態聯編,并且任何一種編譯器都支持靜態聯編。
動態聯編是指在程序執行的時候才將函數實現和函數調用關聯,因此也叫運行時綁定或者晚綁定,動態聯編對函數的選擇不是基于指針或者引用,而是基于對象類型,不同的對象類型將做出不同的編譯結果。C++中一般情況下聯編也是靜態聯編,但是一旦涉及到多態和虛擬函數就必須要使用動態聯編了。下面將介紹一下多態。
多態:字面的含義是具有多種形式或形態。C++多態有兩種形式,動態多態和靜態多態;動態多態是指一般的多態,是通過類繼承和虛函數機制實現的多態;靜態多態是通過模板來實現,因為這種多態實在編譯時而非運行時,所以稱為靜態多態。
二、代碼實例:
動態多態實例如下:
#include <stdio.h>#include <iostream>/** *Shape*/class CShape{public: CShape(){} virtual ~CShape(){} virtual void Draw() = 0;};/***Point*/class CPoint : public CShape{public: CPoint(){} ~CPoint(){} void Draw() { printf("Hello! I am Point!/n"); }};/***Line*/class CLine : public CShape{public: CLine(){} ~CLine(){} void Draw() { printf("Hello! I am Line!/n"); }};void main(){ CShape* shape = new CPoint(); //draw point shape->Draw();//在這里shape將會調用CPoint的Draw()函數 delete shape; shape = new CLine(); //draw Line shape->Draw();//而在這里shape將會調用CLIne 的Draw()函數 delete shape; return ;}大家可以考慮一下它的輸出結果,如果實在不知道,那就麻煩你運行一下它吧!
由上面的例子,大家應該能理解什么是多態了:也就是一個Draw() 可以有兩種實現,并且是在運行時決定的,在編譯階段不知道,也不可能知道!只有在運行的時候才能知道我們生成的shape是那種圖形,當然要實現這種效果就需要動態聯編了,在基類我們會把想要多態的函數聲明為虛函數,而虛函數的實現原理就使用了動態聯編。如果你想了解的更透徹,那就上網查查資料吧!在這里我就不再
主站蜘蛛池模板:
金川县|
吐鲁番市|
宁国市|
资溪县|
雅江县|
沙田区|
巩义市|
怀柔区|
泗阳县|
邹城市|
黄骅市|
定州市|
龙江县|
岑巩县|
大渡口区|
隆昌县|
南溪县|
太湖县|
武清区|
昭通市|
当雄县|
焦作市|
望城县|
象州县|
前郭尔|
泰来县|
广宗县|
怀安县|
扶风县|
本溪|
兴仁县|
玛沁县|
内江市|
和林格尔县|
土默特右旗|
剑河县|
万宁市|
曲水县|
舞阳县|
安泽县|
长武县|