de *next; }; template
//声明模板 class list //定义类模板 { node
*head; //此处node为结构体类型模板 int size; public: list(){ head = 0; size = 0; } bool insert(T val); //参数取T类型 bool deletes(T val); //参数取T类型 bool contains(T val); //参数取T类型 void print(); ~list(); }; template
list
::~list() //定义函数模板 { node
*temp; //node为结构体类型模板 for (node
*p = head; p;) { temp = p; p = p->next; delete temp; } } template
bool list
::insert(T x) { node
*nodes = new node
; if (nodes) { nodes->val = x; nodes->next = head; head = nodes; size++; return true; } return false; } template
bool list
::deletes(T x) { node
*temp; if (head->val == x) { temp = head->next; delete head; size--; head = temp; return true; } for (node
*p = temp = head; p; temp = p, p = p->next) if (p->val == x) { temp->next = p->next; delete p; size--; return true; } return false; } template
bool list
::contains(T x) { for (node
*p = head; p; p = p->next) if (p->val == x) return true; return false; } template
void list
::print() { for (node
*p = head; p; p = p->next) cout << p->val << " "; cout << endl; } void main() { list
intlist; //定义一个整型链表对象intlist,此时传递进来的模板类型参数为
intlist.insert(34); intlist.insert(54); intlist.insert(78); intlist.insert(76); intlist.insert(54); intlist.print(); list
floatlist; //定义一个浮点型链表对象floatlist,此时传递进来的模板类型参数为
floatlist.insert(34.56); floatlist.insert(65.4); floatlist.insert(7534.56); floatlist.insert(364.56); floatlist.print(); list
charlist; //定义一个字符串链表对象charlist,此时传递进来的模板类型参数为
charlist.insert("windows"); charlist.insert("object"); charlist.insert("borland"); charlist.insert("virtual_function"); charlist.print(); }
首先定义一个结构体模板,它与类模板用法相同;再定义一个类模板,结构体模板和类模板取同样的模板参数T。
说明:
(1)类模板的说明(包括成员函数定义)不是一个实实在在的类,只是对类的描述,称为类模板(class template)。类模板必须用类型参数将其实例化为模板类后,才能用来生成对象。一般地,其表示形式为:
类模板名 <类型实参表> 对象名(值实参表)
(2)其中<类型实参表>表示将类模板实例化为模板类时所用到的类型(包括系统固有的类型和用户已定义类型),<值实参表>表示将该模板类实例化为对象时其构造函数所用到的变量。一个类模板可以用来实例化多个模板类。
(3)类型参数必须至少在类说明中出现一次。
(4)类模板的成员函数都是函数模板,实现语法和函数模板类似。如果在类中定义(作为inline函数),不需要特别说明。如果在类外定义,则每个成员函数定义都要冠以模板参数说明,并且指定类名时要后跟类型参数。
(5)类模板在表示如数组、表、图等数据结构特别重要,因为这些数据结构的表示和算法不受所包含的元素类型的影响。