C 中類模板的概念和意義

2022-08-18 01:27:14 字數 2890 閱讀 5213

1,在 c++ 中是否能夠將泛型的思想應用於類?

1,函式模板是將泛型程式設計的思想應用於函式,就有了函式模板;

2,可以,常用的 c++ 標準庫就是 c++ 中的標準模板庫,c++ 中的 stl 就是將泛型的思想應用於一系列的函式,就得到了函式模板,當然也有很多的類模板;

3,類模板就是將泛型思想應用於 c++ 中的類而得到的新概念;

2,類模板:

1,一些類主要用於儲存和組織資料元素;

1,類模板就是為了資料結構而誕生的;

2,類中資料組織的方式和資料元素的 具體型別無關;

3,如:陣列類、鍊錶類、stack 類、queue 類等;

1,c++ 中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注類所需實現的功能;

3,c++ 中的類模板:

1,以相同的方式處理不同的型別;

2,在類宣告前使用 template 進行標識;

3,< typename t > 用於說明類中使用的泛指型別 t;

1,**示例:

1 template < typename t >

2class operator //

class 表明將泛型程式設計應用於類

3;

4,類模板的應用:

1,只能顯示指定具體型別,無法自動推導;

2,使用具體型別 < type > 定義物件;

1,**示例:

1 operatorop1;

2 operatorop2;

3int i = op1.op(1, 20);4

string s = op2.op("

d.t.

", "

software

");

4,類模板:

1,宣告的泛指型別 t 可以出現在類模板的任意地方;

2,編譯器對類模板的處理方式和函式模板相同;

1,從類模板通過具體型別產生不同的類;

1,編譯器將類模板當做乙個模子,這個模子可以產生許多實實在在的類;

2,在宣告的地方對類模板**本身進行編譯;

3,在使用的地方對引數替換後的**進行編譯;

5,類模板初探程式設計實驗:

1 #include 2 #include 34

using

namespace

std;

56 template < typename t >

7class operator //

要是用這個類模板有乙個前提條件,即當前的 operator 類模板要操作的資料型別必須支援 +、-、*、/ 這四個運算子,這四個運算子如果要運用於自己定義的資料型別類,要過載這四個運算子;第一次編譯是對類模板本身的語法進行編譯;814

15t minus(t a, t b)

1619

20t multiply(t a, t b)

2124

25t divide(t a, t b)

2629

};30

31string

operator-(string& l, string& r) //

全域性函式方式過載 - 操作符,編譯通過;先類內部、再全域性

3235

36int

main()

37

1,編譯器對類模板第一次編譯針對類模板本身**進行編譯;

2,第二次編譯是使用類模板時針對每個成員函式獨立編譯;

6,類模板的工程應用:

1,類模板必須在標頭檔案中定義;

2,類模板不能分開實現在不同的檔案中;

3,類模板外部定義的成員函式需要加上模板 <> 宣告;

1,將類模板的成員函式實現放到類模板的外部實現;

2,以上三條規則不是 c++ 和編譯器的一部分,只是工程應用裡習慣這樣做,這樣做後,**可維護性、擴充套件性都會變好,因此建議遵守這三條規則;

7,模板類的工程應用程式設計實驗:

1,標頭檔案(名字和類名一樣) operator.h 中的內容:

1 #ifndef _operator_h_  //

防止被包含兩次;

2#define _operator_h_

34 template < typename t >

5class

operator6;

1314 template < typename t > //

加上類模板;

15 t operator::add(t a, t b) //

add() 是 operator 類模板的;

1619

20 template < typename t >

21 t operator::minus(t a, t b)

2225

26 template < typename t >

27 t operator::multiply(t a, t b)

2831

32 template < typename t >

33 t operator::divide(t a, t b)

3437

38#endif

2,標頭檔案的應用;

1 #include 2 #include 

3 #include "

operator.h"4

5using

namespace

std;67

intmain()

8

1,三條規則不是硬性要求但是卻可以帶來很大好處;

8,小結:

1,泛型程式設計的思想可以應用於類;

2,類模板以相同的方式處理不同型別的資料;

3,類模板非常適用於編寫資料結構相關的**;

4,類模板在使用時只能顯示指定型別;

類模板的概念和意義

類模板的概念和意義 類模板一些類主要用於儲存和組織資料元素 類中資料組織的方式和資料元素的具體型別無關 如 陣列類,鍊錶類,stack類,queue類等 c 中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注類所需要實現的功能 c 中的類模板 以相同的方式處理不同的型別 在類宣告...

58 類模板的概念和意義

一些類主要用於儲存和組織資料元素,類中資料組織的方式和資料元素的具體型別無關,如陣列類,鍊錶類,stack類,queue類等。c 中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注類所需要實現的功能。c 中的類模板 以相同的方式處理不同的型別,在類宣告前使用template進行標...

58 類模板的概念和意義

1 思考 在c 中是否能夠將泛型的思想運用於類?yes 2 類模板 c 中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注類所需要實現的功能。template typename t class operator operator op1 operator op2 int i op...