首页 > 代码库 > 14-类模板(上)

14-类模板(上)

一.类模板

   C++中可以将模板的思想应用与类,使得类可以不关注具体所操作的数据类型,而只关注类所实现的功能

   C++中的类模板

    ----  提供一种特殊的类以相同的行为处理不同的类型

    ----  在类声明前使用template进行标识

    ----  <typename T>用于说明类中使用的泛指类型T

template<typename T>
class Operator
{
public:
	T add(T a,T b)
	{
		return a+b;
	}
	T minus(T a,T b)
	{
		return a-b;
	}
};


       *:声明的泛指类型T可用于声明成员变量和成员函数

       *:编译器对类模板的处理方式和函数模板相同

           ----- 编译器从类模板通过具体类型产生不同的类

           ----- 编译器在声明的地方对类模板代码本身进行编译

           ----- 编译器在使用的地方对参数替换后的代码进行编译

   类模板的使用

        ---- 使用具体类型定义对象

 

	Operator<int> op1;// op1用于int类型的加减法 
	Operator<double> op2;// op2用于double类型的加减法 
	cout<<op1.add(5,4)<<endl;
	cout<<op2.minus(1.5,0.02)<<endl;

   类模板外部定义成员函数的实现时,需要加上 template<typename T>的声明

   

<pre name="code" class="cpp">template<typename T>
class Operator
{
public:
	T add(T a,T b);
	T minus(T a,T b);
};

template<typename T>
T Operator<T>::add(T a,T b)
{
	return a-b;
}
template<typename T>
T Operator<T>::add(T a,T b)
{
	return a-b;
}


二. 类模板的特化

     template<> 声明一类时,表示这是一个特化类

//Test 类模板 
template<typename T>
class Test
{
public:
	T test(T v)
	{
		cout<<"T test(T v)"<<endl;
		cout<<"sizeof(T)="<<sizeof(T)<<endl;
		return v;
	}
};
// Test 类模板的int特化 
template<>
class Test<int>
{
public:
	int test(int v)
	{
		cout<<"int test(v)"<<endl;
		cout<<"sizeof(int)="<<sizeof(int)<<endl;
	}
};

    特化类模板的意义

       当类模板在处理某种特定类型有缺陷时,可以通过类模板的特化来克服处理这种特定类型带来的不足。

    注意:

         编译器优先选择特化类生成的对象!!! 










14-类模板(上)