本文共 1897 字,大约阅读时间需要 6 分钟。
C++中模板的介绍:
1、模板的概念
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模板可以分为两类,一个是函数模板,另一个就是类模板。
2、函数模板的写法
函数模板的一般形式如下:
Template说明: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"#includeusing std::cout;using std::endl;//声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,//T可以被任何字母或者数字代替。template 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
#ifndef ClassTemplate_HH#define ClassTemplate_HHtemplateclass myClass{private: T1 I; T2 J;public: myClass(T1 a, T2 b);//Constructor void show();};//这是构造函数//注意这些格式template myClass ::myClass(T1 a, T2 b) :I(a), J(b){}//这是void show();template void myClass ::show(){ cout << "I=" << I << ", J=" << J << endl;}#endif
// Test.cpp
// Test.cpp#include "stdafx.h"#include输出:#include "Header.h"using std::cout;using std::endl;void main(){ myClass class1(3, 5); class1.show(); myClass class2(3, 'a'); class2.show(); myClass class3(2.9, 10); class3.show(); system("PAUSE");}