1.1、
一些類主要用於
儲存和組織
資料元素
1.2、
類中資料組織的方式和資料元素的
具體型別無關
。如陣列類、鍊錶類、stack類、queue類等。
1.3、
c++中將模板的思想應用於類,使得
類的實現
不關注資料元素的具體型別
,而只關注類所需要
實現的功能。
2.1、
以相同的方式
處理不同的型別
2.2、
在類宣告前使用
template進行標識。
2.3、
用於說明類中使用的
泛指型別t
template
class operator ;
3.1、
只能顯式指定具體的型別
,無法自動推導!!!
3.2、
使用具體型別定義物件
。如operatorop1;或operatorop2;
3.3、
宣告的泛指型別t可以出現在類模板的任意地方
3.4、
編譯器對類模板的處理方式和函式模板相同(二次編譯)
3.4.1、
從類模板通過具體型別
產生不同的類
3.4.2、
在宣告的地方對
類模板**本身
進行編譯
3.4.3、
在使用的地方對
引數替換後
的**進行編譯(也就是第二次編譯。)
/***************** 類模板初探 ******************/
#include
#include
using namespace std;
template
class operator
t minus(t a, t b)
t multiply(t a, t b)
t divide(t a, t b)
};
//利用全域性函式過載string類的減法操作符
string operator-(string& l, string& r)
int main()
4.1、
類模板必須在標頭檔案
中定義4.2、
類模板不能分開實現
在不同的檔案中
4.3、
類模板外部
定義的成員函式需要加上
模板<>
宣告 4.4、類模板的編譯方法:兩種: (1)包含編譯 (2) 分離編譯。
1、包含編譯
/*包含編譯:將類模板宣告和定義兩者直接寫在.h檔案中(如本例)。因為模板例項化需要看到模板的定義,而不僅僅是宣告,所以模板類的定義全部放在標頭檔案中,這種叫做包含編譯,等下說分離編譯*/
#ifndef _operator_h_
#define _operator_h_
template
class operator ;
template
t operator::add(t a, t b)
template //宣告下面函式的t型別為泛型,任意型別
t operator::minus(t a, t b)
template //宣告下面函式的t型別為泛型,任意型別
t operator::multiply(t a, t b)
template //宣告下面函式的t型別為泛型,任意型別
t operator::divide(t a, t b)
#endif
#include "operator.h"
#include
using namespace std;
int main()
2、分離編譯
/* 分離編譯:將類模板宣告在***.h檔案,類模板實現在***.cpp檔案。
a。方法1:在***.h檔案後面包含***.cpp
b.方法2:在要需要使用模板的單元(如main.cpp)中include ***.cpp
c.方法3:在***.cpp中顯示例項化模板:template class operator. 並在main.cpp中 用extern template class operator來宣告是外部的模板例項化(如本例。)
*/#ifndef _operator_h_
#define _operator_h_
template
class operator ;
#endif
#include "operator.h"
template
t operator::add(t a, t b)
template
t operator::minus(t a, t b)
template
t operator::multiply(t a, t b)
template
t operator::divide(t a, t b)
template class operator; //顯示例項化模板,使用int型別
#include
#include "operator.h"
using namespace std;
extern template class operator; //外部變數(顯示例項化模板)
//g++ main.cpp operator.cpp
int main()
就是說這個類裡面函式處理的資料是通過動態識別的。類模板
5.1、
泛型程式設計的思想可以應用於類
5.2、
類模板以相同的方式處理不同型別的資料
5.3、
類模板非常適用於編寫資料結構相關的**
5.4、
類模板在使用時只能顯示指定型別
58課 類模板的概念和意義
本文學習自 狄泰軟體學院 唐佐林老師的 c 課程 問題 在c 中能否將泛型思想應用於類?c 中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注所需要實現的功能。c 中的類模板 以相同的方式處理不同的型別 在類宣告前使用template進行標識 用於說明類中使用的泛指型別t tem...
58 類模板的概念和意義
一些類主要用於儲存和組織資料元素,類中資料組織的方式和資料元素的具體型別無關,如陣列類,鍊錶類,stack類,queue類等。c 中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注類所需要實現的功能。c 中的類模板 以相同的方式處理不同的型別,在類宣告前使用template進行標...
58 類模板的概念和意義
1 思考 在c 中是否能夠將泛型的思想運用於類?yes 2 類模板 c 中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注類所需要實現的功能。template typename t class operator operator op1 operator op2 int i op...