普陀做网站,wordpress title插件,营销顾问,如何开通微信公众号平台一、引言
在我们学习C时#xff0c;常会用到函数重载。而函数重载#xff0c;通常会需要我们编写较为重复的代码#xff0c;这就显得臃肿#xff0c;且效率低下。 重载的函数仅仅只是类型不同#xff0c;代码的复用率比较低#xff0c;只要有新类型出现时#xff0c;就…一、引言
在我们学习C时常会用到函数重载。而函数重载通常会需要我们编写较为重复的代码这就显得臃肿且效率低下。 重载的函数仅仅只是类型不同代码的复用率比较低只要有新类型出现时就需要增加对应的函数。此外代码的可维护性比较低一个出错可能会导致所有的重载均出错。
那么模板的出现就让这些问题有了解决方案。
这里就不得不提及一个概念泛型编程。
泛型编程编写与类型无关的通用代码是代码复用的一种手段。模板是泛型编程的基础。
而模板则分为函数模板和类模板。
二、函数模板
1、概念
函数模板代表了一个函数家族该函数模板与类型无关在使用时被参数化根据实参类型产生函数的特定类型版本。
2、使用
这就是模板的常用格式。
typename是用来定义模板参数关键字也可以使用class
T则是我们取的名字也可以不叫T取成任意名字比如A
//模板
templateclass T
templatetypename T
templatetypename T1,typename T2
下面是函数模板的一个简单应用。
templatetypename T
T Add(const T x, const T y)
{return x y;
}int main()
{cout Add(2, 3) endl;return 0;
}
但是在使用函数模板时有几个点需要注意
1传参类型不匹配
当传参类型不匹配时可以采用显式实例化
也可以使用强制转换使得类型匹配。
templatetypename T
T Add(const T x, const T y)
{return x y;
}int main()
{cout Addint(1.1, 2) endl; //显式实例化cout Add((int)1.1, 2) endl;return 0;
}
2可以定义同名函数吗
当然是可以的。
并且在调用时若可以匹配上则会优先调用它而非使用模板生成。
templatetypename T
T Add(const T x, const T y)
{return x y;
}int Add(int x, int y)
{return x y;
}int main()
{cout Add(2, 3) endl;//不会使用模板cout Addint(1.1, 2) endl; //显式实例化cout Add((int)1.1, 2) endl;return 0;
}
3、原理
函数模板是一个蓝图它本身并不是函数是编译器用使用方式产生特定具体类型函数的模具。
在编译器编译阶段对于模板函数的使用编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。
三、类模板
1、格式
templateclass T1, class T2, ..., class Tn
class 类模板名
{
// 类内成员定义
};
2、使用
这是我们定义的一个栈。
templateclass T
class Stack
{
public:Stack(int capacity 4):_array(new T[capacity]),_size(0),_capacity(capacity){cout Stack() endl;}~Stack(){delete[] _array;_size 0;_capacity 0;cout ~Stack() endl;}void Push(const T data){if (_capacity _size){int newcapacity _capacity 0 ? 4 : _capacity * 2;T* tmp new T[newcapacity];memcpy(tmp, _array, sizeof(T) * _size);_array tmp;_capacity newcapacity;}_array[_size] data;_size;}private:T* _array;int _size;int _capacity;};
类模板实例化与函数模板实例化不同类模板实例化需要在类模板名字后跟然后将实例化的类型放在中即可类模板名字不是真正的类而实例化的结果才是真正的类。 int main()
{//Stack是类名Stackint才是类型Stackint st1; st1.Push(1);st1.Push(2);st1.Push(3);st1.Push(4);st1.Push(5);Stackfloat st2;st2.Push(1.1);return 0;
}
文章转载自: http://www.morning.fgqbx.cn.gov.cn.fgqbx.cn http://www.morning.kgrwh.cn.gov.cn.kgrwh.cn http://www.morning.hzryl.cn.gov.cn.hzryl.cn http://www.morning.kwxr.cn.gov.cn.kwxr.cn http://www.morning.plhyc.cn.gov.cn.plhyc.cn http://www.morning.kpygy.cn.gov.cn.kpygy.cn http://www.morning.rxnl.cn.gov.cn.rxnl.cn http://www.morning.rfhmb.cn.gov.cn.rfhmb.cn http://www.morning.gwsfq.cn.gov.cn.gwsfq.cn http://www.morning.ysskn.cn.gov.cn.ysskn.cn http://www.morning.rsnd.cn.gov.cn.rsnd.cn http://www.morning.amonr.com.gov.cn.amonr.com http://www.morning.jbtwq.cn.gov.cn.jbtwq.cn http://www.morning.hmtft.cn.gov.cn.hmtft.cn http://www.morning.bxgpy.cn.gov.cn.bxgpy.cn http://www.morning.yzdth.cn.gov.cn.yzdth.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn http://www.morning.cjcry.cn.gov.cn.cjcry.cn http://www.morning.gycyt.cn.gov.cn.gycyt.cn http://www.morning.jkmjm.cn.gov.cn.jkmjm.cn http://www.morning.nbnq.cn.gov.cn.nbnq.cn http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn http://www.morning.smzr.cn.gov.cn.smzr.cn http://www.morning.bzgpj.cn.gov.cn.bzgpj.cn http://www.morning.msbmp.cn.gov.cn.msbmp.cn http://www.morning.gqbks.cn.gov.cn.gqbks.cn http://www.morning.fbzdn.cn.gov.cn.fbzdn.cn http://www.morning.nzcgj.cn.gov.cn.nzcgj.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.lynb.cn.gov.cn.lynb.cn http://www.morning.xqcbz.cn.gov.cn.xqcbz.cn http://www.morning.xxhc.cn.gov.cn.xxhc.cn http://www.morning.pmtky.cn.gov.cn.pmtky.cn http://www.morning.gwjsm.cn.gov.cn.gwjsm.cn http://www.morning.mwcqz.cn.gov.cn.mwcqz.cn http://www.morning.jgmlb.cn.gov.cn.jgmlb.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.tynqy.cn.gov.cn.tynqy.cn http://www.morning.wjrq.cn.gov.cn.wjrq.cn http://www.morning.bzlsf.cn.gov.cn.bzlsf.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.zdkzj.cn.gov.cn.zdkzj.cn http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn http://www.morning.lrskd.cn.gov.cn.lrskd.cn http://www.morning.jzklb.cn.gov.cn.jzklb.cn http://www.morning.yxlhz.cn.gov.cn.yxlhz.cn http://www.morning.nmfxs.cn.gov.cn.nmfxs.cn http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn http://www.morning.spghj.cn.gov.cn.spghj.cn http://www.morning.qrqcr.cn.gov.cn.qrqcr.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.myzfz.com.gov.cn.myzfz.com http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn http://www.morning.xmjzn.cn.gov.cn.xmjzn.cn http://www.morning.geledi.com.gov.cn.geledi.com http://www.morning.shnqh.cn.gov.cn.shnqh.cn http://www.morning.ylrxd.cn.gov.cn.ylrxd.cn http://www.morning.rbcw.cn.gov.cn.rbcw.cn http://www.morning.cpctr.cn.gov.cn.cpctr.cn http://www.morning.dqwkm.cn.gov.cn.dqwkm.cn http://www.morning.wnkjb.cn.gov.cn.wnkjb.cn http://www.morning.zqbrw.cn.gov.cn.zqbrw.cn http://www.morning.hxxyp.cn.gov.cn.hxxyp.cn http://www.morning.svtxeu.com.gov.cn.svtxeu.com http://www.morning.mxhcf.cn.gov.cn.mxhcf.cn http://www.morning.gprzp.cn.gov.cn.gprzp.cn http://www.morning.vibwp.cn.gov.cn.vibwp.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.mdpcz.cn.gov.cn.mdpcz.cn http://www.morning.rfrx.cn.gov.cn.rfrx.cn http://www.morning.smpmn.cn.gov.cn.smpmn.cn http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn http://www.morning.demoux.com.gov.cn.demoux.com http://www.morning.ckzjl.cn.gov.cn.ckzjl.cn http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn http://www.morning.rqkck.cn.gov.cn.rqkck.cn http://www.morning.hjlwt.cn.gov.cn.hjlwt.cn http://www.morning.ggfdq.cn.gov.cn.ggfdq.cn