模闆函數
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;
}
//構造函數如果不寫,編譯器生成預設無參構造。顯示的寫了構造,就必須實作它;