天天看點

模闆函數

模闆函數

1 解決,不同類型資料的相同操作寫大量備援的代碼

2 函數模闆不是一個實在的函數,編譯器不能為其生成可執行代碼。定義函數模闆後隻是一個對函數功能架構的描述,當它具體執行時,将根據傳遞的實際參數決定其功能(百度百科)

3示例

// demo1.cpp : 定義控制台應用程式的入口點。
//

#include "stdafx.h"
#include <iostream>

template<typename T>
void Swap(T &a,T &b)
{
   T x = a;
   a = b;
   b = x;
   return;
}
template<typename T>//每個函數都要重新寫一次在函數頭
T Sum(T *X,T *Y)
{
    printf("SUM !");
    *X = *X + 2.0;
    return (*Y + *X);

}

template<class A,class B>
void printstr(A a,B b)
{
    std::cout<<a<<"-----"<<b<<std::endl;
}

int sum2(int a ,int b)
{
    printf(" sum2!");
    return (a*2 + b);
}

int _tmain(int argc, _TCHAR* argv[])
{
    int x =1,y=2;
    Swap(x,y);

    float x1=0.0,x2 =1.1;
    Swap(x1,x2);

    printf("%d, %d, %f ,%f",x,y,x1,x2);
//-----------------------------------------------------
    getchar();

    float a =3.222;
    float b = 2.123;
    printf("%f, %f, %d",a,Sum(&a,&b),sum2(3,5));//從右到左先逐個計算各個表達式,然後從左到右逐個輸出。
    getchar();
//-----------------------------------------------------
    char* str = "cccccccccc";
    int m = 0;
    printstr(str,m);
    getchar();

    return 0;
}      
模闆函數

4 類模闆

什麼是預設構造函數:

A default constructor is a constructor which can be called with no arguments (either defined with an empty parameter list, or with default arguments provided for every parameter). A type with a public default constructor is DefaultConstructible.      
模闆函數
//在.H中聲明,注意你要用這個函數,就一定要定義所有會用到的東西,不能光聲明
//僅聲明不定義,會出現函數無法解析

#include <iostream>
template<typename T>
class TestC{
public:

    TestC();//這個是預設構造,不寫,編譯器給你生成;不過一旦顯示的寫出來了,就要你自己定義
    ~TestC();
    void setT(T t1);
    void PrintT();
private:
    T t;
};      
//.cpp
#include "stdafx.h"
#include <iostream>
#include "Testc.h"

template<typename T>
TestC<T>::TestC(){};
template<typename T>
TestC<T>::~TestC(){};

template<typename T>
void TestC<T>::setT(T t1)
{
    this->t = t1;
}

template<typename T>
void TestC<T>::PrintT()
{
    std::cout<<this->t <<std::endl;;
}


int _tmain(int argc, _TCHAR* argv[])
{
    
    TestC<char*> A;
    A.setT("test t");
    A.PrintT();
    getchar();

    return 0;
}
//構造函數如果不寫,編譯器生成預設無參構造。顯示的寫了構造,就必須實作它;