類模板 上 定義 工程應用

2021-07-27 13:44:48 字數 3031 閱讀 4571

類模板和函式模板都是編譯器根據我們呼叫的型別,進行二次編譯生成具體的例項的。類模板的使用實際上是將類模板例項化成乙個類。

c++中可以將模板的思想應用於類,使得類的可以不關注具體所操作的資料型別,而只關注類所需要實現的功能。

c++中的類模板:

提供一種特殊的類以相同的行為處理不同的型別。

在類宣告前使用template進行標識。

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

宣告的泛指型別 t可用於宣告成員變數和成員函式。

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

類模板的應用:

使用具體型別定義物件。

**舉例:

#include 

#include

using

namespace

std;

template

//類模板

class operator

;template

//修飾成員函式

t operator::add(t a, t b)//要加上

template

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

int main(int argc, char *argv)

類模板中對於定義成員函式的cpp檔案,編譯時發現全都為函式模板,就會只會檢查語法是否正確,不會生成可執行**。等到了要呼叫這個函式的時候,編譯器會第二次編譯這個函式,但是標頭檔案中如果只包含了類定義的內容,沒有包含成員函式的定義,就會呼叫失敗,程式報錯。因此,需要把類中的成員函式的定義和類定義放在一起

或者,在main檔案中包含成員函式的定義的cpp或hpp檔案,同時在成員函式定義檔案中包含類定義的標頭檔案,這樣就全部被包含了。

#include 

"成員函式定義檔案.cpp"

#include

"成員函式定義檔案.hpp"

在模板類外部定義成員函式的實現時,需要加上template < typename t > 的宣告。

舉例說明:

//類陣列模板 類定義 標頭檔案 array.h

#ifndef _array_h_

#define _array_h_

template//定義陣列類

class array

;#endif

//類陣列模板 成員函式定義 標頭檔案 array.hpp

#ifndef _array_def_h_

#define _array_def_h_ //加上巨集保護

#include "array.h" //包含類類定義的標頭檔案

template

array::array(int length)//建構函式,注意 array::

mlength = length;

mspace = new t[mlength];

}template

array::array(const array& obj)//建構函式

template

array::~array() //析構函式

template

t& array::operator(int i)//過載 操作符

template

array& array::operator= (const array& obj)//過載 = 操作符

template

bool array::operator== (const array& obj)//過載 == 操作符 }}

else

return ret;

}template

bool array::operator!= (const array& obj)//過載 != 操作符

#endif

//main檔案 main.cpp

#include

#include

#include "array.hpp" //包含成員函式定義的檔案

using

namespace

std;

int main(int argc, char *argv)

類模板可以被特化

template <>宣告乙個類時,表示這是乙個特化類。

特化類模板的意義:

當類模板在處理某種特定型別有缺陷時,可以通過類模板的特化來克服處理這種特定型別帶來的不足。

注意:

編譯器優先選擇特化類生成物件。而且,必須先定義了類模板,然後才能定義類模板的特化。

**舉例:

#include 

#include

using

namespace

std;

template

class test

};template

<> //特化

class test

};int main(int argc, char *argv)

自定義工具類01

ftputil ftpclient 工具類 idutils 生成一切id 的策略的工具類。可以使用他生成名稱 jsonutils 物件與json 格式轉換的工具類 public class ftputil 切換到上傳目錄if ftp.changeworkingdirectory basepath f...

抽象類的應用 定義模板

問題定義 假設人分為學生和工人,學生和工人都可以說話,但是學生和工人說話的內容是不一樣的,也就是說說話這個功能應該是乙個具體功能,而說話的內容就要由學生或工人來決定了。可以使用抽象類來實現這個功能。abstract class person public void setname string na...

14 類模板(上)

c 中可以將模板的思想應用與類,使得類可以不關注具體所操作的資料型別,而只關注類所實現的功能。c 中的類模板 提供一種特殊的類以相同的行為處理不同的型別 在類宣告前使用template進行標識 用於說明類中使用的泛指型別t templateclass operator t minus t a,t b...