函数模板和类模板的定义和使用

  • Post author:
  • Post category:其他


模板是

泛型编程

的基础。所谓泛型编程就是编写

与类型无关

的逻辑代码,是一种复用的方式。模板分为函数模板和类模板



函数模板:建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。


一般形式:


template


<


typename




T


>


通用函数定义


注意:关键字


typename


是类型名,只适用于函数体相同、函数的参数个数相同而类型不同的情况。

函数模板格式:


template

<

class


形参名1

,

class


形参名2,


class


形参名n

>


返回类型 函数名

(

参数列表

)


{…


}

模板形参的定义既可以使用class,也可以使用

typename

,含义是相同的。


例1:用函数模板实现求

3


个数中的最大者。


程序:

#include<iostream>

using namespace std;

template<typename T>//模板声明,T为类型参数

T max(T a, T b, T c)//定义一个通用函数,T作虚拟类型名

{



if (b > a)



{



a = b;



}



if (c > a)



{



a = c;



}



return a;

}

int main()

{



int i1 = 12, i2 = 3, i3 = 9, i;



double d1 = 56.7, d2 = -23.5, d3 = 33.6, d;



long g1 = 67854, g2 = -912456, g3 = 673456, g;



i = max(i1, i2, i3);//T被int取代



d = max(d1, d2, d3);//T被double取代



g = max(g1, g2, g3);//T被long取代



cout << “i_max=” << i << endl;



cout << “d_max=” << d << endl;



cout << “g_max=” << g << endl;



system(“pause”);



return 0;

}


结果:


i_max=12


d_max=56.7


g_max=673456


请按任意键继续

. . .




类模板:



类模板是类的抽象,类是类模板的实例


在类模板内定义:


类模板名

<

实际类型名

>

对象名;


类模板名

<

实际类型名

>

对象名(实参表);


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


template<class  虚拟类型参数

>


函数类型 类模板名

<

虚拟类型参数

>

::成员函数名(函数形参表)

{…}




:


template


<


class




numtype


>


numtype




Compare<


numtype


>::max()


{


return


(x > y) ? x : y;


}


例2:声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。


程序:

#include<iostream>

using namespace std;

template<class numtype>//类模板声明,虚拟类型名为numtype

class Compare//类模板名为Compare

{

public:



Compare(numtype a, numtype b)//定义构造函数



{



x = a;



y = b;



}



numtype max()



{



return(x > y) ? x : y;



}



numtype min()



{



return(x < y) ? x : y;



}


private:



numtype x, y;

};

int main()

{



Compare<int>cmpl(3, 7);



cout <<cmpl.max()<<” is the Maximum of two integer numbers. “<< endl;



cout << cmpl.min() << ” is the Minimum of two integer numbers. ” << endl<<endl;



Compare<float>cmp2(3.5, 77.1);



cout << cmp2.max() << ” is the Maximum of two integer numbers. ” << endl;



cout << cmp2.min() << ” is the Minimum of two integer numbers. ” << endl << endl;



Compare<char>cmp3(‘a’, ‘A’);



cout << cmp3.max() << ” is the Maximum of two integer numbers. ” << endl;



cout << cmp3.min() << ” is the Minimum of two integer numbers. ” << endl;



system(“pause”);



return 0;

}


结果:


7 is the Maximum of two integer numbers.


3 is the Minimum of two integer numbers.



77.1 is the Maximum of two integer numbers.


3.5 is the Minimum of two integer numbers.



a is the Maximum of two integer numbers.


A is the Minimum of two integer numbers.


请按任意键继续

. . .

  • 模板优缺点总结

优点:

  1. 模板复用了代码,节省资源,更快的迭×××发,C++的标准模板库(STL)因此而产生。

  2. 增强了代码的灵活性。

缺点:

  1. 模板让代码变得凌乱复杂,不易维护,编译代码时间变长。

  2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

转载于:https://blog.51cto.com/yaoyaolx/1760103


关闭菜单