C++泛型编程

一.函数模板

函数模板定义:

template

返回类型  函数名(形参表)

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

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

template

T1  Func( T1 a , T2 b, T3 c)

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

模板参数的匹配问题

1.强制转换

cout<

2.通过<>指定类型

cout<(2,2.3)<

3.指定多个模板参数

template< typename T1, typename T2>

T1 Max (T1 x  , T2  y)

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

tempalte

T1   Func ( T1 a[],int n)

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

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

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

template

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
using namespace std;
template
T Max(T x ,T y)
{return x>y?x:y;}
template
T Max(T x,T y,T z)
{
   T max=0;
   if(x>y)
   max=x;
    else
    max=y;
   if(max
T Max(T a[],int n)
{
    T max=0;
    for(int i=0;imax)
      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<

二.类模板

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

基本结构:

template

class ...

{

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

}

类体外定义:

template

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

定义为内联函数:

inline T 类名 函数名(参数)

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

类名 <数据类型>对象名

Stack a;

类模板参数:

1.非类型参数

template int size>

class....

2.默认模板参数

template int size=10>【注:必须放在右端】

class....


你可能感兴趣的:(C++)