C++泛型编程

一.函数模板

函数模板定义:

template<typename | class T>

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

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

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

template<typename T1,typename T2,typename T3>

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

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

模板参数的匹配问题

1.强制转换

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

2.通过<>指定类型

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

3.指定多个模板参数

template< typename T1, typename T2>

T1 Max (T1 x  , T2  y)

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

tempalte<typename T1 , int  size>

T1   Func ( T1 a[],int n)

注:函数调用 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, int size=10>【注:必须放在右端】

class....


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值