c++中模板_類别範本的宣告和定義

淨無邪發表於2017-11-17

一、函式模板用法

1.1申明和定義

Ø  在函式申明和定義前面,加一個模板template<classT, classC>就行,其餘正常定義和申明

Ø  呼叫時,跟正常函式一樣呼叫

注意:

Ø  模板在呼叫時,才確定引數的具體型別!!!

Ø  模板宣告定義只能在全域性,名稱空間或類範圍內進行。即不能在區域性範圍,函式內進行,比如不能在main函式中宣告或定義一個模板

1.2呼叫示例

template<classT, classC> T add1(T, T, C);

int main()

{

add1(1, 2, 3); //只用到模板T,沒有用到模板C

   add1(1.5, 3.5, 3); //只用到模板T,沒有用到模板C

 

   return NULL;

}

 

template<classT, classC> T add1(T a, T b,C c)

{

   return a + b; //只用到模板T,沒有用到模板C

}

 

二、類别範本用法

2.1類别範本的宣告和定義

2.1.1類别範本的申明

Ø  在類前面加一個模板template<classT, classC>就行

2.1.2類别範本的定義

Ø  在類在類前面加一個模板template<classT, classC>

Ø  在定義類後加<T,C>。比如類A的函式Add,定義為void A<int>::Add(T a, T b)

2.1.3類别範本呼叫

將在定義類後加<T,C>改為<int,double>

比如示例一個物件a:

A<int> a;

 

2.2具體示例

*.h申明

template<classT> classA//類别範本宣告,類前面加template<class T>

{

public:

   T a1;

   int Add1(T t1,T t2);

};

 

*.cpp定義

//類别範本宣告,類前面加template<class T>。並且類A後面帶這個<T>

template<classT> intA<T>::Add1(Tt1, T t2)

{

   return t1 +t2;

}

 

成員函式呼叫

A<int> a;//例項化一個類,A後面帶這個A<int>

int aa =a.Add1(2, 3);//呼叫模板成員函式,跟模板函式一樣呼叫就行

 

三、模板類預設值設定

3.1模板類的形參為型別形參

Ø  類别範本可以設定預設值,函式模板不能設定預設值

Ø  設定預設值時,儘量放在最後,不要放在開頭

Ø  如果放在開頭,後面一定要設定預設值,並且跟第一個預設值一樣

例如:template<classT1 = int,class T2 =int> class CeilDemo{…}

 

3.2示例

TemplateDemo03.h

#ifndefTEMPLATE_DEMO_03

#define TEMPLATE_DEMO_03

//定義帶預設型別形參的類别範本。這裡把T2預設設定為int型。

template<classT1, classT2 = int>class CeilDemo{

public:

   int ceil(T1,T2);

};

//在類别範本的外部定義類中的成員時template後的形參表應省略預設的形參型別。

template<classT1, classT2>

int CeilDemo<T1,T2>::ceil(T1a, T2 b){

   return a>> b;

}

 

#endif

 

TemplateDemo03.cpp

#include<iostream.h>

#include "TemplateDemo03.h"

 

void main(){

   CeilDemo<int> cd;

   cout <<cd.ceil(8, 2) << endl;

}

 

參考內容:

http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html

http://blog.csdn.net/zhongshan_c/article/details/8917470

http://blog.csdn.net/elcoteq983/article/details/7032213

相關文章