不仅函数可以使用模板,在一个自定义的类中同样可以使用模板。
如果我们用c++创建一个队列的类并实现队列的入队和出队功能,按照以往的方式,我们需要编译这一需求的代码。
#include<iostream>
using namespace std;
class Queue
{
struct Node
{
int nVal;
struct Node* pNext;
};
Node* pHead;
Node* pEnd;
public:
Queue();
~Queue();
void Push(int nVal1);
int Pop();
};
int main()
{
Queue q1;
q1.Push(1);
q1.Push(2);
q1.Push(3);
cout << q1.Pop() << endl;
cout << q1.Pop() << endl;
cout << q1.Pop() << endl;
cout << endl;
return 0;
}
Queue::Queue()
{
Node* pHead=NULL;
Node* pEnd=NULL;
}
Queue::~Queue()
{
while(pHead!=NULL)
{
Node* pDel = pHead;
pHead = pHead->pNext;
delete pDel;
}
}
void Queue::Push(int nVal1)
{
Node* pTemp = new Node;
pTemp->nVal = nVal1;
pTemp->pNext = NULL;
if (pHead == NULL)
{
pHead = pTemp;
}
else
{
pEnd->pNext = pTemp;
}
pEnd = pTemp;
}
int Queue::Pop()
{
if (pHead == NULL) return 0;
else
{
Node* pDel = pHead;
pHead = pHead->pNext;
int n = pDel->nVal;
delete pDel;
pDel = NULL;
if (pHead == NULL) pEnd = NULL;
return n;
}
}
由于在队列类Queue中,nVal存储的int类型内容可以变动为其他类型,所以将int用模板T1替换即可。
#include<iostream>
#include<string>
using namespace std;
template<typename T1>
class Queue
{
struct Node
{
T1 nVal;
struct Node* pNext;
};
Node* pHead;
Node* pEnd;
public:
Queue()
{
Node* pHead = NULL;
Node* pEnd = NULL;
}
~Queue()
{
while (pHead != NULL)
{
Node* pDel = pHead;
pHead = pHead->pNext;
delete pDel;
}
}
void Push(T1 nVal1)
{
Node* pTemp = new Node;
pTemp->nVal = nVal1;
pTemp->pNext = NULL;
if (pHead == NULL)
{
pHead = pTemp;
}
else
{
pEnd->pNext = pTemp;
}
pEnd = pTemp;
}
T1 Pop()
{
if (pHead == NULL) return 0;
else
{
Node* pDel = pHead;
pHead = pHead->pNext;
T1 n = pDel->nVal;
delete pDel;
pDel = NULL;
if (pHead == NULL) pEnd = NULL;
return n;
}
}
};
int main()
{
Queue<int> q1; Queue<double> q2; Queue<char> q3;
q1.Push(1);
q2.Push(2.1);
q3.Push('a');
cout << q1.Pop() << endl;
cout << q2.Pop() << endl;
cout << q3.Pop() << endl;
cout << endl;
return 0;
}
最后得出结果: