C 學習筆記7

2021-10-02 16:50:45 字數 2310 閱讀 2965

目錄

1、聯編的概念

2、靜態聯編

3、動態聯編

4、虛函式

5、虛析構函式

6、純虛函式和抽象類

1、聯編的概念

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

2、靜態聯編

靜態聯編又稱靜態束定、 早期聯編、 前期聯編。

靜態聯編是指聯編工作是在程式編譯鏈結階段進行的, 靜態聯編又稱早期聯編, 因為這種聯編是在程式開始執行之前完成的。 在程式編譯階段進行的這種聯編又稱靜態束定, 在編譯時就解決了程式中的操作呼叫與執行該操作**間的關係, 確定這種關係又被稱為束定, 編譯時束定又稱為靜態束定。

靜態聯編就是,編譯器在程式執行前就知道呼叫什麼函式做什麼事。

靜態聯編特點:速度快效率高

3、動態聯編

動態聯編又稱動態關聯、 動態束定、 後期聯編、 晚期聯編。

動態聯編是指編譯程式在編譯階段並不能確切地知道將要呼叫的函式, 只有在程式執行時才能確定將要呼叫的函式, 為此要確切地知道將要呼叫的函式,要求聯編工作在程式執行時進行, 這種在程式執行時進行的聯編工作被稱為動態聯編。

c++規定: 動態聯編是在虛函式的支援下實現的。

動態聯編, 編譯器在程式執行時才知道這個函式的具體作用

c++中, 動態聯編必須包括以下方面:

1、 成員函式必須宣告為virtual

2、 如果基類中的成員函式宣告為虛函式, 則派生類中不必再宣告,虛函式其實類似於函式指標

4、虛函式

以上**執行過程中,先執行a中的fun函式,在執行b中的析構;存在風險

只析構了 a 類的部分, b 類的擴充套件部分沒有析構**。 造成記憶體洩漏

c++規定動態聯編是在虛函式的支援下實現的

虛函式是動態聯編的基礎。 虛函式是非 static 的成員函式

說明虛函式的方法如下 

virtual 型別說明符 函式名(參數列);

虛函式一般是在基類上做的, 派生類重寫這個虛函式。

一旦基類中的乙個成員函式設定成了虛函式, 它就變成了乙個函式指標變數。如果基類沒有涉及到派生的時候, 這個指標變數就指向它自身這個函式。

一旦涉及到派生了, 基類中的 function 虛函式指向了派生類的 function 函式的入口位址。 所以涉及到派生的時候, 派生類要重新實現這個虛函式

注意:1、 基類中的虛函式, 不涉及派生的時候, 指向自己。

2、 當涉及到派生的時候, 如果派生類沒有重寫這個虛函式, 基類中的虛函式還是指向自身。

3、 當涉及到派生的時候, 並且派生類重寫了這個虛函式, 則基類中的虛函式就指向了派生類的重寫的這個虛函式。

動態聯編在編譯階段不能確定函式入口, 只有在呼叫的時候才能確定函式入口

#includeusing namespace std;

class point;

point::point(double x,double y)

double point::area(void)const

class rectangle:public point;

rectangle::rectangle(double x,double y,double w,double h):point(x,y)

double rectangle::area(void)const

double circle::area(void)const

;純虛函式沒有函式體;乙個類中如果有純虛函式,那麼該類為抽象類;

抽象類不允許例項化物件,但是可以用來派生

純虛函式在派生類中一定要實現, 如果派生類中不實現基類中的純虛函式, 派生類就會變成抽象類

C 學習筆記(7)

子類可以自動共享父類的資料結構和方法的機制,單繼承 子類只繼承以父類的資料結構和方法。多繼承 子類可以繼承多個父類的資料結構和方法 需小心二義性 不同類物件呼叫相同的方法可以產生不同的結果 class class name permission lable 許可權識別符號,可以是public pri...

c 學習筆記(7)

設計立方體類 求出立方體面積和體積 分別用全域性函式和成員函式判斷兩個立方體是否相等 class cube intgetl void setw int ml intgetw void seth int ml intgeth intcalcultes intcalculatev 成員函式 只需要乙個輸...

c 學習筆記7

七 c 語言整合開發環境和程式除錯 程式開發的一般過程 c 的開發工具 editor compiler linker 編輯器 編譯器和聯結器 ide integrated developing environment,整合開發環境 microsoft visual c 2010 express mi...