一,函数模板
//某个函数对所有数据类型都将进行相同的处理时,使用模板
#include<iostream>
#include<string>
using namespace std;
template <class T>
void swapp(T &a,T &b)
{
T temp;
temp=a;
a=b;
b=temp;
}
void main()
{
int a1=10,b1=20;
cout<<"交换前a1="<<a1<<",b1="<<b1<<endl;
swapp(a1,b1);
cout<<"交换后a1="<<a1<<",b1="<<b1<<endl;
cout<<endl<<endl;
string a2="fish",b2="turtle";
cout<<"交换前a2="<<a2<<",b2="<<b2<<endl;
swapp(a2,b2);
cout<<"交换后a2="<<a2<<",b2="<<b2<<endl;
}
二,类模板
#include<iostream>
#include<string>
using namespace std;
template <class T>
class Stack
{
private:
int size;
int sp;
T *data;
public:
Stack(int size);//传统的方式,声明和定义分开
~Stack(){delete []data;}
void push(T value);
T pop(){return data[--sp];}//内联的方式,将定义部分写入内部
};//类模板
template <class T>
Stack<T>::Stack(int size)
{
this->size=size;//this指针指向当前类生成的对象,所以左边为类的属性,右边为形参
data=new T[size];
sp=0;
}
template <class T>
void Stack<T>::push(T value)
{
data[sp++]=value;
}
void main()
{
Stack<int> intStack(100);
intStack.push(1);
intStack.push(2);
intStack.push(3);
cout<<intStack.pop()<<endl;
cout<<intStack.pop()<<endl;
cout<<intStack.pop()<<endl;
}