c++模板概念是什么?详细点
展开全部
有以下这样3个求加法的函数:
int Add(int x,int y)
{
return x+y;
}
double Add(double x,double y)
{
return x+y;
}
long Add(long x,long y)
{
return x+y;
}
它们拥有同一个函数名,相同的函数体,却因为参数类型和返回值类型不一样,所以是3个完全不同的函数。即使它们是二元加法的重载函数,但是不得不为每一函数编写一组函数体完全相同的代码。如果从这些函数中提炼出一个通用函数,而它又适用于多种不同类型的数据,这样会使代码的重用率大大提高。那么 C++的模板就可解决这样的问题。模板可以实现类型的参数化(把类型定义为参数),从而实现了真正的代码可重用性。C++中的模板可分为函数模板和类模板,而把函数模板的具体化称为模板函数,把类模板的具体化成为模板类。
int Add(int x,int y)
{
return x+y;
}
double Add(double x,double y)
{
return x+y;
}
long Add(long x,long y)
{
return x+y;
}
它们拥有同一个函数名,相同的函数体,却因为参数类型和返回值类型不一样,所以是3个完全不同的函数。即使它们是二元加法的重载函数,但是不得不为每一函数编写一组函数体完全相同的代码。如果从这些函数中提炼出一个通用函数,而它又适用于多种不同类型的数据,这样会使代码的重用率大大提高。那么 C++的模板就可解决这样的问题。模板可以实现类型的参数化(把类型定义为参数),从而实现了真正的代码可重用性。C++中的模板可分为函数模板和类模板,而把函数模板的具体化称为模板函数,把类模板的具体化成为模板类。
参考资料: http://www.jsjren.com/c++xuexi/html/24.html
展开全部
我打个比方吧,假如说你学了C语言很久,对链表很熟练,然后别人想让你写一个简单的学生管理系统,但是虽然烂熟于心,但是写那么多插入链表,删除链表,查询链表函数依然很麻烦,而且都是一样的代码,写很多遍就烦了。
那么能不能做一个模板类,把所有的通用代码集成起来,我们只需要调用模板函数就可以不用写一些基础代码了。
就这样,模板类诞生了,模板类集成了很对前人优秀的代码,举了例子,list模板
这是链表模板,我们以后写插入链表,删除链表,查询链表函数,再也不用也麻烦的代码从遍历链表开始,直接list。insert(),list。srarch(),list。delete()就可以实现功能了,所以,模板就是为了方便而产生的
那么能不能做一个模板类,把所有的通用代码集成起来,我们只需要调用模板函数就可以不用写一些基础代码了。
就这样,模板类诞生了,模板类集成了很对前人优秀的代码,举了例子,list模板
这是链表模板,我们以后写插入链表,删除链表,查询链表函数,再也不用也麻烦的代码从遍历链表开始,直接list。insert(),list。srarch(),list。delete()就可以实现功能了,所以,模板就是为了方便而产生的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
模板这东西,相当于容器,就vector模板来说吧,我们可以将它想象为排成一列的桶,桶里面的装的东西就是你需要放的元素,也许是int类型、double类型,自定义的结构、联合、类等元素,也可能还是另外的模板(就是说桶里面又有一个小的桶)。
至于模板函数,就容易了,不指定任何类型,因为无法确定需要的类型,所以就相当于空在那里,等用户自己来确定,到底该放什么东西在上面。
至于模板函数,就容易了,不指定任何类型,因为无法确定需要的类型,所以就相当于空在那里,等用户自己来确定,到底该放什么东西在上面。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
模板可以认为是类的类,我们知道一个类可以实例化为一个对象,那么类其实可以认为是一个模板类的一份实例,我们可以让一个模板类产生多份类实例,只需要简单的指定不同的模板参数,这样可以进一步提高代码的抽象性,不知道你了解lua或者As3这类脚本编程语言么,他们都提供函数类型,AS3提供类类型,这些语言认为一份函数代码其实就是某个函数对象,一份类代码就是某个模板类的一份实例;不知你理解了木有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询