gavanwanggw

导航

模板

       模板定义:模板就是实现代码重用机制的一种工具。它能够实现类型參数化,即把类型定义为參数。 从而实现了真正的代码可重用性。

模版能够分为两类。一个是函数模版,另外一个是类模版。


1、 函数模板
函数模板的一般形式例如以下:

Template <class或者也能够用typename T>

返回类型 函数名(形參表)
{//函数定义体 }

说明: 

(1)template是一个声明模板的keyword,表示声明一个模板keyword。

(2)<>里面的是模板參数。class和typename不能省略,每一个形參前都要加class 或typename。

代码例如以下:

//Test.cpp

#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"); }


2、类模板

定义一个类模板:

Template < class或者也能够用typename T >
class类名{
//类定义......
}。

说明:

(1)template是声明各模板的keyword,表示声明一个模板,

(2)<>里是模板參数。模板參数能够是一个,也能够是多个。

代码例如以下:

#ifndef ClassTemplate_HH

#define ClassTemplate_HH

template<typename T1,typename T2>

class myClass{

private:

     T1 I;

     T2 J;

public:

     myClass(T1 a, T2 b);//Constructor

     void 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

#include <iostream>

#include "ClassTemplate.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");

}

非类型模版參数
一般来说。非类型模板參数能够是常整数(包含枚举)或者指向外部链接对象的指针。

那么就是说。浮点数是不行的。指向内部链接对象的指针是不行的。

template<typename T, int MAXSIZE>

class Stack{

Private:

       T elems[MAXSIZE];

…

};


Int main()

{

       Stack<int, 20> int20Stack;

       Stack<int, 40> int40Stack;

…

};

posted on 2017-05-20 11:53  gavanwanggw  阅读(125)  评论(0编辑  收藏  举报