c++模板简介

一.函数模板
1.模板的基本格式
#include<iostream>
using namespace std;
template <typename T>
void swap(T a[],T b[],T size)
{
    for(int i=0;i<size;i++)
    {
        T t=a[i];
        a[i]=b[i];
        b[i]=t;
    }
}
template <typename T>
void show(T a[],T size)
{
    for(int i=0;i<size;i++)
        cout<<a[i];
    cout
    <<endl;
}
int main()
{
    int a[]={1,2,3,4};
    int b[]={2,3,4,5};
    cout<<"a交换之前";show(a,4);
    cout<<"b交换之前";show(b,4);
    swap<int>(a,b,4);
    cout<<"a交换之后";show(a,4);
    cout<<"b交换之后";show(b,4);
}
运行结果:
a交换之前1234
b交换之前2345
a交换之后2345
b交换之后1234
2.模板实参的使用
#include<iostream>
using namespace std;
template <typename T>
T min1(T a, T b)
{
    return a<b?a:b;
}
template <typename T1,typename T2>
T1 min2(T1 a,T2 b)
{
    return a<b?a:b;
}
int main()
{
    cout<<min1(3,5)<<endl;
    cout<<min1<double>(3,5.0)<<endl;//如果不强制转化为同一类型则会出错,double是模板实参(编译时),括号里是函数实参(运行时)
    cout<<min2(3,2.0)<<endl;
}
3.常规参数
在模板的虚拟类型参数,可以用一般类型修饰符,如(int double)声明的常规参数.必须显式的给出对应于常规参数的模板实参.
举个栗子:
template <typename T,int Rows,int cols>//运用了常规参数
void fun()...
那么:
fun<double,4,3>(...)//必须显式给出常规参数的模板实参即4,3
二.类模板
1.基本格式:
template<模板形参表>
class 类名
在模板外定义模板类:
template<模板形参表>
类型名 类名<T>::函数名(参数表)
举个栗子:
template<typename T>
class Array
{
};
模板类的函数成员都是以函数模板的形式存在的(必须)
template<typename T>
Array<T>::Array(int min,int max)//
{
}
template<typename T>
T& Array<T>::operator [](...)//T可以代替int double












猜你喜欢

转载自blog.csdn.net/qq873044564/article/details/80514752