资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
程序设计 cs.sjtu 2011.9 程序设计 - 1 第第1313章章 泛型机制泛型机制模板模板 v类模板的定义 v类模板的实例化 v模板的编译 v非类型形参和参数的默认值 v类模板的友元 v类模板作为基类 程序设计 cs.sjtu 2011.9 程序设计 - 2 类模板的定义类模板的定义 v类模板允许用户为类定义一种模式,使 得类中的某些数据成员、某些成员函数 的参数或返回值能取任意数据类型。 v定义格式: template next, *q; head-next=NULL; while (p != NULL) q=p-next; delete p; p=q; 程序设计 cs.sjtu 2011.9 程序设计 - 34 template void linkList:create(const elemType node *p, *q = head; cout tmp; if (tmp = flag) break; p = new node(tmp); q-next = p; q = p; q-next = NULL; 程序设计 cs.sjtu 2011.9 程序设计 - 35 linkList linkList类模板中的输出运算符重类模板中的输出运算符重 载函数的实现载函数的实现 template ostream os next; return os; 程序设计 cs.sjtu 2011.9 程序设计 - 36 链表类的使用链表类的使用 v定义: linkList intList; 该定义产生了类模板的一个整型实例 v如果想创建这个单链表,可以调用create函数 : intList.create(0); 该调用将输入链表中的元素值,直到输入0为止。 v要输出链表的所有元素,可以直接输出: cout intList; 程序设计 cs.sjtu 2011.9 程序设计 - 37 链表类的另一种实现链表类的另一种实现 v由于结点类只有链表类要用,因此可以 将结点类作为链表类的内嵌类。 v这样既可以保证结点类对于链表类的私 有性,访问也更加方便。 程序设计 cs.sjtu 2011.9 程序设计 - 38 第第1313章章 泛型机制泛型机制模板模板 v类模板的定义 v类模板的实例化 v模板的编译 v非类型形参和参数的默认值 v类模板的友元 v类模板作为基类 程序设计 cs.sjtu 2011.9 程序设计 - 39 类模板作为基类类模板作为基类 v类模板可以作为继承关系中的基类。自 然,从该基类派生出来的派生类还是一 个类模板,而且是一个功能更强的类模 板。 v类模板的继承和普通的继承方法基本类 似。只是在涉及到基类时,都必须带上 模板参数。 程序设计 cs.sjtu 2011.9 程序设计 - 40 类模板继承实例类模板继承实例 v从linkList类模板派生一个栈的类模板 v栈是一类特殊的线性表,它的插入和删除都 只能在表的一段进行。允许插入和删除的一 端称为栈顶,另一端称为栈底。栈的常用操 作有进栈(push)和出栈(pop)。 v由于栈是一个特殊的线性表,因此可以将栈 建立在表的基础上。在单链表中,我们可以 将表头定义为栈顶,表尾定义为栈底。因此 ,栈就是在单链表的基础上增加两个操作: push和pop。 程序设计 cs.sjtu 2011.9 程序设计 - 41 类模板类模板stackstack的使用的使用 v定义一个整型栈:stack st; v进栈: for (int i = 1; i 10; +i) st.push(i); v出栈: while (st.pop(i) cout i t; v执行结果: 9 8 7 6 5 4 3 2 1 程序设计 cs.sjtu 2011.9 程序设计 - 42 小结小结 v本章介绍了C+中的泛型程序设计的工 具-模板。 v模板是独立于类型的蓝图,编译器可以 根据模板产生多种特定类型的实例。 v模板分为函数模板和类模板。 v本章中,我们学习了如何写一个类模板 ,如何实例化类模板,使之成为一个模 板类,如何定义及使用模板的友元。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号