概述模板是一種引數化的多型工具。所謂引數化的多型性,是指將程式所處理的物件的型別引數化,使一段程式**可以用於處理多不同型別的物件。採用模板程式設計,可以為各種邏輯功能相同而資料型別不同的程式提供一種**共享的機制。
1、函式模板:
(1)一般說明形式:
template 《模板形參表》注:①函式模板的定義以關鍵字template開頭返回值型別函式名(模板函式形參表)
②template之後<>中是函式模板的引數列表
③函式模板的引數是型別引數,其型別為class或typename
(2)語法:
①模板形參在模板中作為一種型別使用,可用於函式形參、函式返回值和函式區域性變數;
②每個模板形參要在函式的形參列表中至少出現一次;
③模板引數名的作用域侷限於函式模板的範圍內;
④函式模板擁有型別模板引數、非型別模板引數。
2、函式模板示例:
//3型別模板引數
:t x
//非型別模板引數:
num
template
void print(const t &t, const x &x)
int main()
、模板會被編譯兩次: (
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)
模板:解決了函式過載版本過多、巨集函式不安全及不適合複雜函式的問題。
template1、類模板:t mymax(const t &a, const t &b)
int main()
(1)一般說明形式:
①類內實現
template 《型別形參表》②類外實現class 《類名》
class 《類名》{};(2)語法:template < 型別形參表》
《返回型別》 《類名》 《型別名錶》::《成員函式1> (形參表)
template < 型別形參表》
《返回型別》 《類名》 < 型別名錶》::《成員函式2> (形參表)
……template < 型別形參表》
《返回型別》 《類名》 < 型別名錶》::《成員函式n> (形參表)
①類模板的例項化:用具體的資料型別替換模板的引數以得到具體的類(模板類)。
②模板類也可以例項化為物件。
③用下列方式建立類模板的例項:
類名《型別實參表》物件名稱;④類模板可以有非型別模板引數;
⑤類模板可以有預設值。
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 深拷貝 當類持有其它資...