关键字:template,typename,class
template<class T>
T max(T a,Tb) //函数模板
{
return (a>b)? a:b;
}
int ival = max(100,99); //模板函数
char cval=max<char> ('A','B');
template<typename T>
void swap(T &a,&T b)
{
T tmp=a;
a=b;
b=tmp;
}
int x=20,y=30;
swap<int> (x,y);
变量作为模板参数
template<int size>
void display()
{
cout<<size<<endl;
}
display<10>();
多参数函数模板
template<typename T, typename C> //typename 、class 、变量参数可混用
void display(T a,C b)
{
cout<<a<<" "<<b<<endl;
}
int a=1024; string str = "hello world!";
display<int ,string> (a,str);
以上在vc++6.0出现报错,转到此处解决
类模板
template<class T>
class MyArray
{
public:
void display(){}
private:
T *a;
};
template<class T> //每一个成员函数的定义前面都要加上这句
void MyArray<T>::display()
{}
void main()
{
MyArray<int> arr; //实例化对象arr
arr.display();
}
例子:
#include<iostream>
using namespace std;
template <typename T,int size,int num>
class MyArray{
public:
MyArray();
~MyArray()
{
delete []m_pArr;
m_pArr=NULL;
}
void display();
private:
T *m_pArr;
};
template<typename T,int size,int num>
MyArray<T,size,num>::MyArray()
{
m_pArr=new T[size];
for(int i=0;i<size;i++)
{
m_pArr[i]=num;
}
}
template<typename T,int size,int num>
void MyArray<T,size,num>::display()
{
for(int i=0;i<size;i++) cout<<m_pArr[i]<<" ";
}
void main()
{
MyArray<int,5,6> arr;
arr.display();
}
输出结果为:6 6 6 6 6