C++泛型编程

匿名 (未验证) 提交于 2019-12-03 00:22:01

一.函数模板

函数模板定义:

template<typename | class T>

注:不允许templat语句和函数模板之间有任何其他语句

函数模板的类型参数可以不止一个

template<typename T1,typename T2,typename T3>

适用情况:函数参数个数相同而类型不同

模板参数的匹配问题

1.强制转换

cout<<Max ( double(2) ,2.3)<<endl;

2.通过<>指定类型

cout<<Max<double>(2,2.3)<<endl;

3.指定多个模板参数

template< typename T1, typename T2>

模板形参表――非类型参数

注:函数调用 Func(a,10);

函数模板重载:函数名相同,参数的个数或者类型不同

目的:有些数据类型存在盲点,无法正确运算,例如字符串类型的数据比较大小必须得用strcmp函数,否则就会变成地址的比较

template<typename T>

T Max(T x,T y)

{return x>y?x:y;}

char *Max(char *s1,char *s2)

{return strcmp(x,y)>0?x:y}


例:求两个数,三个数和一组数的最大值

#include<iostream> using namespace std; template<typename T> T Max(T x ,T y) {return x>y?x:y;} template<typename T> T Max(T x,T y,T z) {    T max=0;    if(x>y)    max=x;     else     max=y;    if(max<z)     max=z;     return max; } template<typename T> T Max(T a[],int n) {     T max=0;     for(int i=0;i<n;i++)     {       if(a[i]>max)       max=a[i];     }     return max; } int main() {     int k;     k=Max(2,3);     double p;     p=Max(2.33,4.11,8.99);     int a[]={1,2,3,4,5,6,7,8,9,3,78,56,889,999};     int l=Max(a,14);     cout<<k<<endl;     cout<<p<<endl;     cout<<l<<endl;      return 0; }

二.类模板

目的:使其中的某些数据成员,成员函数的参数或返回值与具体类型无关。

基本结构:

template<typename T>

class ...

{

T 函数名(T 参数名....)

}

类体外定义:

template<typename T>

返回值类型 类名 <T>::函数名(参数列表)

定义为内联函数:

inline T 类名<T> 函数名(参数)

类模板实例化:类模板->模板类->对象

类名 <数据类型>对象名

Stack <int> a;

类模板参数:

1.非类型参数

template<typename T, int size>

class....

2.默认模板参数

template<typename T,>【注:必须放在右端】

class....


文章来源: C++泛型编程
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!