C++中的模板(函數模板,類模板)


1.模板是生成類或函數的框架,模板使用形參,當實際數據類型賦值給形參的時候,才由編譯器生成類或函數

2.函數模板的聲明由關鍵字template和包含一個或多個數據類型形參的參數列表構成,形參數據類型(T)前面可以是class也可以是typename,類型形參T要用尖括號<>括起來:

Template <typename T>或Template<classT>

3.函數模板的調用

#include "stdafx.h"

#include<stdio.h>

template <class T>

T max(T a,T b)

{

    returna>b?a:b;

}

int _tmain(int argc, _TCHAR* argv[])

{

    printf("%d\n",max(3,10));//更ü完?善?寫′法ぁax<int>(3,10)

    printf("%f\n",max<double>(21.3,20.1));

    return 0;

}

4.用作模板的類型可以是基本類型,也可以是一個類,類似於函數模板的做法,類模板對成員數據和成員函數的參數類型進行泛化,下面是一個模板類A,構造函數和comp函數均在模板聲明中定義,成為內聯函數,print_Type函數在模板外定義,需要用關鍵字template說明T1和T2是模板類型,並以A<T1,T2>::做函數的前綴作用域

//templae2.cpp : 定¨義?控?制?台?應畖用?程ì序ò的?入?口ú點?。£

//

 

#include "stdafx.h"

#include <stdio.h>

#include <typeinfo.h>

template <class T1,class T2>

class A{

    T1 i;

    T2 j;//

public:

    A(T1 t1,T2 t2){i=t1;j=t2;}//內聯函數

    bool comp(){return i>j;}//內聯函數

    voidprint_Type();//函數聲明

};

//成員函數printf_type定義

template <class T1,class T2>

voidA<T1,T2>::print_Type(){

    printf("i的類型是%s\n",typeid(i).name());//打印i的類型名

    printf("j的類型是?%s\n" typeid(j).name());

}

int _tmain(int argc, _TCHAR* argv[])

{   A<int,double> a(3,89.2);

    if(a.comp())

    {

        printf("i>j\n");

    }

    else printf("i<=j\n");

    a.print_Type();

    return 0;

}

5.當模板的泛化處理不適合某個特定的數據類型時,可針對這個數據類型給出相應的模板,包括函數模板特化和類模板特化(叫完全特化技術也叫精確特化)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM