practical_exercises/10_day_practice/day8/readme.md
ģ壨templateC++ʵִûƵҪߣǷͼصͨóƼĻ ģC++Խµ?Իƣʵصͨ㷨ƣܹЧʣdz븴õǿߡ
Ҫ˺ģģ࣬ԼSTLеļģ͡ һģ 1ģ ģǶԾͬԵĺٳģһֲ̬ԵĹߣΪͬͲͬijṩһִ빲Ļơ һģ岢һʵʵڵĺ࣬һDzĺࡣ 2ģ ģ ģ 3.ģģ庯 ģṩһͨõĺΪúΪöֲͬͽеãݵԶʵΪ͵ĺ룬Ҳ˵ģһ塣 ͨȣģijЩԪصδȷģЩԪصͽʹʱغȣģ岻ҪԱظд룬ԶͬͷֵͲͬĺ ģ 1ģĶ
template <class T1, class T2,> (){
//ģ嶨
}
templateǶģĹؼ֣дһ<>еT1T2ģеclassʾIJ͡ ģΪͲģʵģ庯ʱʱҪݵʵһͣintdouble֮ࡣ ģIJгģT1T2 2ʹúģע ڶģʱtemplate뺯ģ嶨֮κ䡣
template <class T>
int x; //ڴλκ
T min(T a,T b){}
ģжͲÿͲùؼclasstypename⣬ģлԳȷͲΪͲ
template <class T1,class T2,class T3,int T4>
T1 fx(T1 a, T 2 b, T3 c){}
ڴʵʱͲT4ֻʹó ҪclassؼclassһȻͬĸɣDzͬġclassʾTһͲκͣintfloatcharȣûstructenumclassԶ͡ ΪģеؼclassC++?typenameΪģؼ֣ͬʱҲ֧ʹclass磬mintemplate <class T>дʽȫȼ۵ģ
template <typename T>
T min(T a,T b){}
3.ģʵ
int x=min(2,3);
int y=min(3,9);
int z=min(8.5);
ֻڵ1εʱģ庯֮ͬ͵IJʱģ庯õ1ʵɵģ庯
ʽʵ
ܹжģʱԶʵģΪģ庯
template <typename T> T max (T, T);
int i = max (1, 2);
float f = max (1.0, 2.0);
char ch = max (a, A);
ʽʵڵģ壬ʵǵʵ
ʾʵexplicit instantiation ʱ,жģͻֵ Ҫʹضʵ ʽ:: ģ<,,ֵ,> ()
template <class T> T max (T, T);
int i = max (1, 2);
// error: data type cant be deduced
int i = max<int> (1, 2);
4.ģػ
char * cp = max (abcd, 1234);
ʵΪchar * max (char * a, char * b){return a > b ? a : b;}
϶ģΪַıȽΪ
char * max (char * a, char * b)
{ return strcmp(a, b)>0 ? a : b; }
} ˵ template < >ģػĹؼ֣< >вҪκݣ < >Ҫػ͡
5.˵ ͬʱģػʱػȵã ͬһУ˺ģػ⣬ͬͨC++ͨĵʵνʽתģ庯ػIJκʽת 6.˳ ͬһоģͨʱƥ˳£ ȫƥķģ庯 ȫƥģ庯 ݵķģ庯 ģ 1.ģĸ ģƽṹͳԱȫͬͲͬͨࡣ ջ ˫ջ
class doubleStack{
private:
double data[size];
};
ַջ
class charStack{
private:
char data[size];
};
Щջ֮⣬ȫͬͿģʵ֡
2.ģ
template<class T1,class T2,>
class {
// Ա붨
}
T1T2Ͳ ģпжģͲͷͲ
3.Ͳ
Ͳָij־ͣڵģʱֻΪṩӦ͵ijֵͲƵģͨ͡ö͡ãԼԱָ룬øͣ˫ͣvoidΪͲ
ģУT1T2ͲT3ǷͲ
template<class T1,class T2,int T3>
ʵʱΪT1T2ṩһͣΪT3ָһ10ģܱȷʵ
4.ģijԱĶ 1ģⶨ壬 template <ģб> ֵ ģ<ģ>::Ա (б){ }; 2Ա壬볣ԱĶƣ ģбġͱʶΪʹ ģбġͨͳΪʹ 5.ģػ
ػ 9-9ķػģͬΪijרдһģࡣ ģػʽһػģ壬һػԱ ػԱķ
template <> ģ<ػ>::ػԱ(){
//
}
template<> void Array<char *>::Sort(){
for(int i=0;i<Size-1;i++){
int p=i;
for(int j=i+1;j<Size;j++)
if(strcmp(a[p],a[j])<0)
p=j;
char* t=a[p];
a[p]=a[i];
a[i]=t;
}
}