C++模板

来源:互联网 发布:java多线程异常处理 编辑:程序博客网 时间:2024/04/30 07:35

C++中模板的介绍:

1、模板的概念

模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模板可以分为两类,一个是函数模板,另一个就是类模板。

2、函数模板的写法

函数模板的一般形式如下:

Template <class或者也可以用typename T>返回类型 函数名(形参表){//函数定义体 }

说明:template是声明模板的关键字,表示声明了一个模板,关键字class不能省略。

例如:

template < class T>T Sum(T x, T y){ return x + y; }
相当于同时声明了许多名字都为Sum的函数,但是输入输出的数据类型未定,可以是int、float、double、或char,真正的函数定义要由编译器判定实际使用的数据类型后才完成。

另外,函数模板常常可以用来取代函数的重载,例如:

template < class T>T Abs(T x){ return (x>0)?x:-x; }
相当于同时定义了

int Abs(int x){ return (x>0) ? x : -x; }double Abs(double x){ return (x>0) ? x : -x; }float Abs(float x){ return (x>0) ? x : -x; }
3个函数。
****************

看下例:

#include "stdafx.h"#include <iostream>using std::cout;using std::endl;//声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,//T可以被任何字母或者数字代替。template <class T>T min(T x, T y){return(x < y) ? x : y;}void main(){int n1 = 2, n2 = 10;double d1 = 1.5, d2 = 5.6;cout << "较小整数:" << min(n1, n2) << endl;cout << "较小实数:" << min(d1, d2) << endl;system("PAUSE");}

程序分析:调用min(n1,n2)即实例化函数模板中T的类型为int型;同理min(d1,d2)实例化为double型,求出d1,d2的最小值。

3、类模板的写法

定义一个类模板

Template < class或者也可以用typename T >class类名{//类定义......};
说明:其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个。

例子:

// Header.h

<pre name="code" class="cpp">#ifndef ClassTemplate_HH#define ClassTemplate_HHtemplate<typename T1, typename T2>class myClass{private:T1 I;T2 J;public:myClass(T1 a, T2 b);//Constructorvoid show();};//这是构造函数//注意这些格式template <typename T1, typename T2>myClass<T1, T2>::myClass(T1 a, T2 b) :I(a), J(b){}//这是void show();template <typename T1, typename T2>void myClass<T1, T2>::show(){cout << "I=" << I << ", J=" << J << endl;}#endif

// Test.cpp

// Test.cpp#include "stdafx.h"#include <iostream>#include "Header.h"using std::cout;using std::endl;void main(){myClass<int, int> class1(3, 5);class1.show();myClass<int, char> class2(3, 'a');class2.show();myClass<double, int> class3(2.9, 10);class3.show();system("PAUSE");}
输出:



0 0
原创粉丝点击