第58課 類模板的概念和意義

2021-08-15 01:17:13 字數 3282 閱讀 5273

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...