嵌入式物件導向程式開發 C 模板

2021-10-06 06:15:03 字數 2274 閱讀 2461

概述模板是一種引數化的多型工具。所謂引數化的多型性,是指將程式所處理的物件的型別引數化,使一段程式**可以用於處理多不同型別的物件。採用模板程式設計,可以為各種邏輯功能相同而資料型別不同的程式提供一種**共享的機制。

1、函式模板:

(1)一般說明形式:

template 《模板形參表》

返回值型別函式名(模板函式形參表)

注:①函式模板的定義以關鍵字template開頭

②template之後<>中是函式模板的引數列表

③函式模板的引數是型別引數,其型別為class或typename

(2)語法:

①模板形參在模板中作為一種型別使用,可用於函式形參、函式返回值和函式區域性變數;

②每個模板形參要在函式的形參列表中至少出現一次;

③模板引數名的作用域侷限於函式模板的範圍內;

④函式模板擁有型別模板引數、非型別模板引數。

2、函式模板示例:

//

型別模板引數

:t x 

//非型別模板引數:

num

template

void print(const t &t, const x &x)

int main()

3

、模板會被編譯兩次: (

1)例項化模組函式之前,編譯檢查函式模板的語法問題; (

2)例項化模組函式之後,編譯檢查模板函式的語法問題。 4

、應用--

實現**功能的復用性:(以輸出最大值為例) (

1)函式過載:函式版本較多,後期維護麻煩,導致**體系過於龐大。

int max(int a, int b)

int max(string a, string b)

int max(a a, b b)

2)巨集函式:不安全,不做型別檢查,只做傻瓜式替換,不適合實現過於複雜的函式。

#define max(a,b) a > b ? a : b 

(3)

模板:解決了函式過載版本過多、巨集函式不安全及不適合複雜函式的問題。

template

t mymax(const t &a, const t &b)

int main()

1、類模板:

(1)一般說明形式:

①類內實現

template 《型別形參表》

class 《類名》

②類外實現

class 《類名》{};

template < 型別形參表》

《返回型別》 《類名》 《型別名錶》::《成員函式1> (形參表)

template < 型別形參表》

《返回型別》 《類名》 < 型別名錶》::《成員函式2> (形參表)

……template < 型別形參表》

《返回型別》 《類名》 < 型別名錶》::《成員函式n> (形參表)

(2)語法:

①類模板的例項化:用具體的資料型別替換模板的引數以得到具體的類(模板類)。

②模板類也可以例項化為物件。

③用下列方式建立類模板的例項:

類名《型別實參表》物件名稱;

④類模板可以有非型別模板引數;

⑤類模板可以有預設值。

2、類模板會例項化兩次: (

1)將類模板例項化為模板類; (

2)通過模板類例項化物件。 3

、示例:(使用預設值後的**)

#include#include#include#include//define max_size 1024

using namespace std;

class a

int num;

};//template template >

class stack

void push(t num)

t pop(t num)

private:

int top;

//           t data[max_size];

cont data; // == vectordata;

};int main()

嵌入式物件導向程式開發(1)

d2.26 嵌入式物件導向程式設計 嵌入式linuxc 開發 學習內容 c c with class 95 c中學過的資料型別 基本控制語句 函式 關鍵字 位運算 指標 陣列 1 c到c 公升級 語法公升級 2 c 物件導向的三大特點 封裝 繼承 多型 3 c 模板 4 c 異常處理 5 c 檔案處...

嵌入式物件導向程式開發(5)

五 深拷貝與淺拷貝 1 淺拷貝 對基本型別資料以及簡單的物件直接複製記憶體的拷貝。但是,當類的成員包含指標的時候,使用淺拷貝是將拷貝物件的位址賦值給了新的物件,導致兩個指標指向了同一塊記憶體空間,這時候淺拷貝就不能滿足實際要求了,需使用深拷貝。示例 test const test other m i...

嵌入式物件導向程式開發 深拷貝與淺拷貝

1 淺拷貝 對基本型別資料以及簡單的物件直接複製記憶體的拷貝。但是,當類的成員包含指標的時候,使用淺拷貝是將拷貝物件的位址賦值給了新的物件,導致兩個指標指向了同一塊記憶體空間,這時候淺拷貝就不能滿足實際要求了,需使用深拷貝。示例 test const test other 2 深拷貝 當類持有其它資...