C++中的模版

模板程序设计的基本概念:

编写不依赖于具体数据类型的程序

将算法从特定的数据结构中抽象出来,成为通用的

C++的模板为模板程序设计奠定了关键的基础

函数模板:

由于重载函数的功能相同,仅参数类型不同。若能对重载函数的参数类型做抽象表达,即使用统一形式表达,则可以大大简化源程序。

函数模板的定义格式

Template<class (typename)T1,class T2,………>

返回值类型  函数名(参数裂变){

函数体

格式说明:

Template:关键字,用于定义模板。

一对尖括号:界定模板的参数列表。

class (或typename):关键字,用于定义抽象类型T(也可以用其他标识符表示)。

模板参数表可包含多个类型参数,参数间用逗号分隔。T1、T2等表示抽象类型

函数模板:通过数据类型的参数化,把一组重载函数表示成统一的形式,即函数模板是对一组重载函数的抽象。

模板函数:将函数模板中的抽象类型用具体的数据类型(如int,float,double等)替代后产生的函数

函数模板的使用:

例如:

#include<iostream>

Using namespace std;

//定义函数模板

Template<class T>

void swap(T&x,T&y)

{

       T t=x ;

       x=y ;

       y=t ;

}

int main()

{

swap(m,n) ;

cout<<m<< ‘,’<<n<<endl ;

return 0 ;

}

 

函数模板代表一类函数,必须将其模版参数实例化,才能产生具体函数,供实际调用。这一过程在编译时完成,不会影响程序的运行效率。其过程如下:

1、  先根据函数调用的实参类型int,确定模板实参类型为int ;

 

2、再将模板实参类型int传给模板形参,产生模板函数:void swap(T&x,T&y)

之后如果再遇到相同类型的调用,则直接使用该函数模板,而不产生新的模板函数。

类模板:

实际编程时常涉及一组类,它们的成员组成相同,成员函数的代码形式相同,所不同的只是某些数据成员的类型。例如

class IntStack{

int buf[100];

public:

 void push(int);

 int pop();

………..

};

class DoubleStack{

double buf[100];

public:

       void push(double) ;

       double pop() ;

       ............

};

我们可以用类模版将数据类型参数化,将类模版统一描述。

类模版定义的格式:

template<模板参数表> //模板声明

class 类名{               //类的定义

................                   //成员

 ;

例:

 

Template <class T,class I>

class Stack{

       T buffer[I];

       int top;

public:

       Stack(){top=0;}

       void Push(T&item);

       T Pop();

};

说明:模板参数分为类型参数或非类型参数。类型参数用class或typename说明。

I为非类型参数

T为类型参数

在类模版定义体中,可在指定类型的地方使用类型参数,在使用表达式的地方使用非类型参数。在类内定义类模版成员函数的地方与普通类一样。

在类模板外定义类模板的成员函数:

先进行模板声明

再用类模板名来限定函数名

 

posted on 2013-11-17 21:04  娟娟细流  阅读(220)  评论(0编辑  收藏  举报

导航