C++里面的模板类是什么?

教材上忽然就出现template、之类的东西都被弄得头大了。谁能给我详细,清晰的说明一下是怎么回事。复制网络的答案不要,就是看不懂才来这里问的。... 教材上忽然就出现template、之类的东西都被弄得头大了。

谁能给我详细,清晰的说明一下是怎么回事。

复制网络的答案不要,就是看不懂才来这里问的。
展开
 我来答
cqdjyy01234
推荐于2017-11-26 · TA获得超过1147个赞
知道小有建树答主
回答量:267
采纳率:50%
帮助的人:292万
展开全部
模板类英文为class template,template的中文翻译为模板,所以模板类的意思其实是:类的模板。
顾名思义,模板类是相当于一个模具,当参数给定时,生成具体的类,也叫实例化。它的提出主要是为了减少代码重复。
例如,我们可以用下面的代码交换两个数b和c
a = b;
b = c;
c = a;
这个交换过程与a,b,c的具体类型没有关系,因此我们可以用它来交换两个整数,或者两个浮点数。更一般的,我们可以用来交换两个具有赋值运算符的类型。因此,可以用模板进行一般化:
template<class T>
void swap(T &b, T &c){
a = b;
b = c;
c = a;

}
当然,上面介绍的这个不是模板类,而是模板函数。不过他们的概念是类似的。其中一开始的template代表后面尖括号中的是模板参数(类似于函数的参数),class代表参数是类(相应的,可以用template<int N>来声明整型参数)。后面的代码和的函数基本没有区别,只是用T来代替了具体的类型,例如int,double等。根据需要我们可以用swap<int>(b,c)来交换两个整数,swap<double>(b,c)交换两个浮点数。由于编译器可以根据b,c的具体类型推导T的具体含义,因此可以简写为swap(b,c)。
回到模板类,假设我们需要一个类型来代表动态数组,且该类型支持size成员函数。如果是整型的类,我们可能会写
class vector_int{
size_t size() const;

};
如果某一天,我们又需要浮点类型的动态数组,可能又会写
class vector_double{
size_t size() const;

};
于是就会发现它们的代码是如此的类似,因此我们希望将它一般化。如同swap函数的做法,我们将它定义为模板类:
template<class T>
class vector{
size_t size() const;
};
因此,vec_int等同于vector<int>,而vector_double等同于vector<double>。因为运用模板类的语法类似于
vector<T> a;
因此,编译器没办法为我们推导T的具体含义,所以不能像模板函数一样进行简写。
当然,上面是比较简单的情况,有时候我们需要的类在大多数情况下是一样的,但是对于某几个特殊情形可能不太一样,例如我们可能希望对于bool类型的数组能尽量减少内存的使用,用一个比特位代表一个bool值。从而,我们的数组不是通过bool a[10]的形式来定义。在这种情况下,c++提供了模板特化,也就是说当模板的参数取某个具体的值时,我们使用不同的模板,定义方式如下:
template<>
class vector<bool>{
size_t size() const;
};
因为,它是一个特化的模板类,所以只有普通模板存在的情况下,它的存在才是合法的,不然我们是对什么进行特化的呢?
汽车安全出行
2014-06-16 · TA获得超过490个赞
知道小有建树答主
回答量:416
采纳率:66%
帮助的人:286万
展开全部
简单来说就是一个通用型的函数,我这里以printf为例子.
printf(10);
printf("hahhah");
.....
这里的变量可以是int,float,string等各种类型,甚至是你自己定义的类型,,如果不用模板,那么每一个都要有一个相对应的函数,例如
void printf(int);
void printf(string);
但是用模板一个就够了
template<class T>
void printf(T &t){
cout<<t<<endl;

}
简单来说,模板就是不管你的t是什么类型,都适用于相同的规则(cout<<)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式