在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢?
事实上class用于定义类,在模板引入c++后,最初定义模板的方法为:template
template
区分类模板与模板类的概念
一个类模板(类生成类)允许用户为类定义个一种模式,使得类中的某些数据成员、默认成员函数的参数,某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。
如果一个类中的数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类类。
类模板定义:
定义一个类模板,一般有两方面的内容:
A。首先要定义一个类,其格式为:
template
class test
{
....
}
test为类名,在类定义体中,如果采用通用数据类型的成员,函数参数的前面需加上T,其中通用类型T可以作为普通成员变量的类型。还可以作为成员函数的参数和返回类型等。
例如:
1 template
2
3 class Test
4 {
5 private:
6 T n;
7 const T i;
8 public:
9 Test():i(0) {}
10 Test(T k);
11 ~Test(){}
12
13 void print();
14 T operator+(T x);
15 };
如果在类外定义成员函数,若此成员函数中有模板参数存在,则除了需要和一般类的类外定义成员函数一样的定义外,还需要在函数外进行模板声明例如:
1 template
2 void Test
3 {
4 std::cout<<"n="< 5 std::cout<<"i="<
6 } 1 template 2 Test 3 4 template 5 T Test 6 return n + x; 7 } 关于类模板的使用:类模板的使用实际上是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型> 模板类是类模板实例化后的一个产物,说个具体点的例子吧,我们把类模板比作是一个做饼干的模子,而模板类就是用这个模子做出来的饼干,至于这个饼干是什么味道的就要看你自己在实例化时用的是什么材料了,你可以做巧克力饼干,也可以做牛奶饼干,这些饼干出了材料不一样外,其它的东西都是一样的了。