一 : 继承模板:

#include<iostream>usingnamespacestd;template<typenameT=char>//如果是类模板,是可以加默认值的T=charclassCPeople{public:Ta;CPeople(Ta){this->a=a;}voidprint(){cout<<"CPeoplea="<<a<<endl;}};template<typenameT,typenameY>classCAonaufly:publicCPeople<Y>{public:Tc;CAonaufly(Tc,Yy):CPeople<Y>(y)//==CAonaufly(Tc,Yy):CPeople(y){this->c=c;}voidshow(){cout<<"CAonauflyc="<<c<<endl;}};intmain(){CAonaufly<int,char>ca(12,'k');ca.print();ca.show();return0;}

结果:

解析:

① 在子类的构造函数中 , 如何调用父类的构造函数 CAonaufly( T c , Y y ):CPeople<Y>(y)// == CAonaufly( T c , Y y ):CPeople(y) 这2种都是可以的。

② 子类也可以不用模板 , 这样就把子类给写死了例如CKayer , 直接写死了父类T为char类型:

#include<iostream>usingnamespacestd;template<typenameT=char>//如果是类模板,是可以加默认值的T=charclassCPeople{public:Ta;CPeople(Ta){this->a=a;}voidprint(){cout<<"CPeoplea="<<a<<endl;}};template<typenameT,typenameY>classCAonaufly:publicCPeople<Y>{public:Tc;CAonaufly(Tc,Yy):CPeople<Y>(y)//==CAonaufly(Tc,Yy):CPeople(y){this->c=c;}voidshow(){cout<<"CAonauflyc="<<c<<endl;}};classCKayer:publicCPeople<char>{public:CKayer(charc):CPeople(c){}};intmain(){system("color1A");CAonaufly<int,char>ca(12,'k');ca.print();ca.show();cout<<"======================================"<<endl;CKayerck('q');ck.print();return0;}



二 : 多态模板

#include<iostream>usingnamespacestd;template<typenameT=char>//如果是类模板,是可以加默认值的T=charclassCPeople{public:Ta;CPeople(Ta){this->a=a;}voidprint(){cout<<"CPeoplea="<<a<<endl;}};template<typenameT,typenameY>classCAonaufly:publicCPeople<Y>{public:Tc;CAonaufly(Tc,Yy):CPeople<Y>(y)//==CAonaufly(Tc,Yy):CPeople(y){this->c=c;}voidshow(){cout<<"CAonauflyc="<<c<<endl;}};classCKayer:publicCPeople<char>{public:CKayer(charc):CPeople(c){}};intmain(){system("color1A");CPeople<char>*ca=newCAonaufly<int,char>(12,'k');ca->print();deleteca;return0;}

结果:

解析: