class
compare_int
//建構函式
float
max(
)//求最大值
float
min(
)//求最小值
private :
int x,y;
}class
compare_double
//建構函式
float
max(
)//求最大值
float
min(
)//求最小值
private :
double x,y;
}
template 《模板形參表》
class 類模板名
;
<
class 型別引數1
,class 型別引數2,.
....
.>
template <
class
t>
//類模板定義
class
point
//預設建構函式
point(const t a, const t b)
: x(a)
, y(b)
//帶引數建構函式
void set(const t a, const t b)
; void display(
) private:
t x, y;
};
template 《模板形參表》
返回型別 類名《型別參數列》
::函式名(形式引數列表)
eg:template <
class
t>
void point
::set(const t a, const t b)
//屬於類模板裡面的成員函式
類模板名《型別實參表》 物件名列表;
類模板名《型別實參表》 物件名1
(實參列表1
), 物件名2
(實參列表2),
....
..;
point <
int> a, b;
//定義類模板物件, 呼叫預設建構函式
point m(1,
2), n(3,
4);//定義類模板物件 , 呼叫帶引數建構函式,物件m和n裡面的資料成員都是double型別的
template <
classt,
int n>
//t表示t型別
class
sequence
private:
t array[n];}
;template <
classt,
int n>
void sequence
::set(
int i, t value)
//屬於sequence類型別的實參
sequence <
int,
5> a;
//提供型別和常量表示式,
int對應t,5對應大寫的n,資料是int型的,長度為5
sequence 5> b;
//提供型別和常量表示式
for(i=
0;i<
5;i+
+) a.set(i,i)
;//給a的陣列成員賦值
for(i=
0;i<
5;i+
+) cout<<<
" ";
//輸出陣列成員的值
template <
class
t=char ,
int n=
10>
//類模板定義
class
sequence
;eg:
則物件定義時可以有以下形式:
sequence <> m;
//使用預設型別char和使用預設值10
sequence n;
//提供型別和使用預設值10
sequence <
int,
100> k;
//提供型別和常量表示式
extern int n;
//宣告整型n, 變數定義在另乙個編譯單元
extern struct point p;
//例項化結構體物件p, 結構體定義在另乙個編譯單元
extern class
stack s;
//例項化類物件s, 類定義在另乙個編譯單元
export template<
class
t>
class
a<
int> a;
//例項化類模板物件a, 類模板定義在另乙個編譯單元
export template<
class
t>void f (t& t)
;//例項化函式模板f,函式模板定義在另乙個編譯單元
c 模板之類模板
函式木板比較簡單,就是把函式涉及到的型別都暫時寫成乙個t,然後呼叫的時候,給出具體的引數型別,這時候就會例項化出乙個新的函式,類模板意思差不多,就是把類裡面涉及到的型別暫時寫成乙個t,然後就可以例項化的時候傳遞乙個型別,不過類模板,要顯示的傳遞型別 include using namespace s...
模板類中定義模板函式
用模板類和模板函式是c 程式猿必須掌握的技能。然而要充分運用編譯器的推導能力則不簡單。需求 建立乙個 類,每一列的型別可以任意指定 編譯期指定 每一行的元素可以任意指定 執行期確定 列數可變 編譯期指定 行數可變 執行期確定 這裡特意強調了編譯期和執行期,就是為了最大程度利用編譯器的推導能力,進行編...
STL之類模板
筆記 b站黑馬程式設計師 template template 宣告建立模板 typename 表明其後面的符號是一種資料型別,可以用class代替 t 通用的資料型別,名稱可以替換,通常為大寫字母template class person void showperon nametype m name...