16.4.1 類模板成員函數
類模板成員函數的定義具有如下形式:
必須以關鍵字template開頭,後接類的模板形參表。
必須指出它是哪個類的成員。
類名必須包含其模板形參。
1.destroy函數
template<class Type> void Queue<Type>::destroy(){
while(!empty())
pop();
}
template<class Type> void Queue<Type>::destroy(){
while(!empty())
pop();
}2. pop函數
template<class Type> void Queue<Type>::pop()
{
QueueItem<Type> p=head;
this->head=this->head->next;
delete p;
}
template<class Type> void Queue<Type>::pop()
{
QueueItem<Type> p=head;
this->head=this->head->next;
delete p;
}3. push函數
template<class Type> void Queue<Type>::push(const Type &p)
{
QueueItem<Type> *pt=new QueueItem<Type>(p);
if(empty())
head=tail=pt;
else{
this->tail->next=pt;
tail=pt;
}
}
template<class Type> void Queue<Type>::push(const Type &p)
{
QueueItem<Type> *pt=new QueueItem<Type>(p);
if(empty())
head=tail=pt;
else{
this->tail->next=pt;
tail=pt;
}
}4. copy_elems函數
template <class Type>
void Queue<Type>::copy_elems(const Queue &orig){
for(QueueItem<Type> *pt=orig.head;pt==0;pt=pt->next)
{
push(pt->item);
}
}
template <class Type>
void Queue<Type>::copy_elems(const Queue &orig){
for(QueueItem<Type> *pt=orig.head;pt==0;pt=pt->next)
{
push(pt->item);
}
}5. 類模板成員函數的實例化
類模板的成員函數本身也是函數模板。像其他任何函數模板一樣,需要使用類模板的成員函數產生該成員的實例化。與其他函數模板不同的是,在實例化類模板成員函數的時候,編譯器不執行模板實參推斷,相反,類模板成員函數的模板形參由調用該函數的對象的類型確定。
6. 何時實例化類和成員
類模板的成員函數只有為程序所用才進行實例化。如果某函數從未使用,則不會實例化該成員函數。
摘自 xufei96的專欄