目錄
為什麼要有模板
注意的幾點:
類模板的派生(類模板派生普通類)
類模板派生類模板
敲敲**
記住兩句話就夠了:
1:型別引數化
2:將與型別無關的底層邏輯抽象出來
對於類模板呢,依然是這兩條含義:
1:型別引數化
2:將資料結構的表示與演算法不受所包含元素的型別影響、資料結構與演算法的分離(資料型別與演算法的分離)
比如鍊錶可以儲存int char double型別的元素,那麼對鍊錶進行排序,則鍊錶的資料結構的表示及其排序演算法都可以避免受到包含元素的型別的影響。
1:類模板是抽象的,必須對其進行引數列表的初始化,這樣編譯器才知道要分配多少記憶體。(c++編譯器要求具體的類)
而函式模板可以自動的進行型別推導,這是一點不一樣的地方。類模板到具體的類再到具體的物件
2:類模板的物件做函式引數:依然需要提前進行引數的初始化
3:類模板中如果自己定義了建構函式,則例項化時也需要對應使用該建構函式,注意類模板是不存在預設建構函式的。
加上引數列表之後,生成了a這個類,而這個類是不存在預設建構函式的,與普通類有較大區別。
其實類模板的派生也就是將類模板轉化成具體的類之後才能再進行派生(具體化模板類,c++編譯器需要知道基類的資料型別是怎樣的,因為在定義派生類時需要呼叫基類的建構函式,也需要提前知道基類所佔的資料空間,資料型別確定,才能給派生類分配具體的記憶體大小)
且,需要在派生類中顯示的呼叫基類模板的建構函式進行自己建構函式的初始化,使用引數的初始化列表。
也必須使用基類的建構函式,初始化列表進行確定。(因為基類的建構函式永遠是首先進行呼叫的)
#includeusing namespace std;
templateclass a
void printa()
private:
t a;
};//對應第二條做函式引數應引數初始化
void class_print(atarget)
//派生普通類,需型別初始化
class b : public a
void printa()
private:
int c;
};//派生模板類
templateclass c :public a
c(t a,t e) :a(a)
void printa()
private:
t d;
};int main()
SUNWEN教程之 C 高階(七) C 教程
好了,言歸正傳.我要說的是c 中的結構 struct 注意,我在這裡說的結構不是指的c 的語言結構.這裡所說的是一種與類 class 相對的東西,下面我就與類相對比,來說一說這個struct.下面的這個例子講述了如何建立乙個具有屬性,方法和乙個欄位的結構.並講述如何使用他.000 structs s...
c 模板之類模板
函式木板比較簡單,就是把函式涉及到的型別都暫時寫成乙個t,然後呼叫的時候,給出具體的引數型別,這時候就會例項化出乙個新的函式,類模板意思差不多,就是把類裡面涉及到的型別暫時寫成乙個t,然後就可以例項化的時候傳遞乙個型別,不過類模板,要顯示的傳遞型別 include using namespace s...
C 泛型程式設計之類模板案例
案例描述 實現乙個通用的陣列類。要求如下 1 可以對內建資料型別以及自定義資料型別的資料進行儲存 2 將陣列中的資料儲存到堆區中 3 建構函式中可以傳入陣列的容量 4 提供對應的拷貝建構函式以及operator 防止淺拷貝問題 5 提供尾插法和尾刪法對陣列中的資料進行增加和刪除 6 可以通過下標的方...