C++ 模板(二)
一 : 继承模板:
#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;}
结果:
解析:
①
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。