C/C++学习笔记(2)--函数模板template,类模板详解(1)

(一)函数模板的概念
		1--假设要编写一个函数对两个参数求和。实际编程中,我们可能希望定义几个这样的函数,每一个都可以对一种
		   给定类型的值求和,那么,可能自然会想到使用重载函数.例如:
		   int add(int a,int b)
		   {
			   return a+b;
		   }
		   double add(double a,double b)
		   {
			   return a+b;
		   }
		   char add(char a,char b)
		   {
			   return a+b;
		   }
		2--这些函数几乎相同,每个函数的函数体是相同的,功能也是相同的,它们之间唯一的区别是形参类型和函数的返回值
		   类型不同
		3--事实上,在具体编写上述代码时,我们必须手工书写所有的代码,所以会使用复制,粘贴,修改等编辑的功能以便得
		   到另一种类型的求和函数。
		4--可是,如果每种类型都需要重复函数的类型和函数体,这样十分麻烦,而且容易出错.
		5--更重要的是,我们需要事先知道可能会支持的哪些类型.如果希望将函数的用于未知类型,这种方法就有问题了
	1--C++有--模板机制(在java中,泛型机制可以解决),可以使用--函数模板--解决上述问题.
	2--函数模板(function template)----是一个独立于类型的函数,这些函数与类型无关,并且只在需要时自动实例化,从而形
	   成“批量型”的编程方式.
(二)函数模板的定义和使用
    1)函数模板的定义
	    函数模板定义的语法形式为:
		template<模板形参列表>函数的返回值类型 函数名(形式参数列表)
		{
			函数体
		}
	    第一行,称为模板定义,其后称为模板函数
	    1--模板定义以--关键字template开始,后接模板形参列表
		2--模板形参列表(template parameterList)---是一对尖括号<>括起来的一个或多个模板形参表-----------不允许为空
		   形参之间以逗号隔开,有两种形式:
		   1--第一种---typename 参数1,typename 参数2....
		   2--第二种---class 参数1,class 参数2.....
		3--模板定义的额后面是函数定义,在函数定义中,可以使用模板形参表中的类型参数,例如:
		   template add(T a,T A b)
		   {
			   return a+b;
		   }
        4--函数模板定义语法的含义---是一个通用型函数,这个函数类型和参数类型没有具体的指定,而是用一个类型标记来表示,
		   类型标记由--编译器--根据所使用的函数而确定,这种---通用型函数---就称为---函数模板
	2)函数模板的使用
	    可以像使用普通函数那样,使用模板函数的调用.代码如下所示:
		#include
		
		using namespace std;
		
		templateT add(T a,T b)
		{
			return a+b;
		}
		
		int main()
		{
			cout<<"int——add"< void outchar(T a)
		{
			for(int i=1;i<=N;i++)
				cout<class 类模板名{
			1--构造函数
			2--析构函数
			3--成员函数
			4--数据成员
		};
	2--类模板--必须以--关键字template--开头,后接模板形参列表