面向对象的程序设计第三讲续模板编程.ppt

面向对象的程序设计第三讲续模板编程.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象的程序设计第三讲续模板编程

面向对象的程序设计 第三讲 <续>模板编程 华中科技大学CAD中心 吴义忠 wuyz@ 回顾 STL容器类:vector<int> Stack的改进 class Stack { public: bool push( const string& ); bool pop( string &elem ); bool peek( string &elem ); bool empty(); bool full(); // definition of size() is placed within class // other members are simply declared ... int size() { return _stack.size(); } private: vector<string> _stack; }; 模板定义的关键字 模板的定义 < X x1 >,X可以为: typename 传入类型名 class 传入类名 template< > 模板嵌套 int等具体类型,传入具体数 函数指针类型,传入函数指针 本章设计任务:二叉树操作 Binary tree 每个节点最多只有一个父节点,最多只有两个子节点 只有一个根节点 二叉树操作:遍历(前序、中序、后序)、插入、删除、查找等 6.1 参数化的节点数据类型 BTnode(节点类,负责存储数据和连接指针)类设计 BineryTree(存储根节点,封装二叉树的各种操作)类 6.2 类模板定义 成员函数的定义 构造函数 一般成员函数 6.3 类型参数的处理 效率考虑 尽量使用const reference 尽量避免二次赋值:构造之前,执行成员数据构造 6.4 二叉树类模板的实现 插入新元素,规则:保持左小右大 算法: 1)如果等于节点值则其重复数加1; 2)如果插入值小于节点值,则插入其左节点(若空,则新建,否则递归); 3)否则插入其右节点 删除操作:保持原有排序特性 算法介绍: 1)根节点删除 2)一般节点删除 3)使一个节点成为子树的最左叶子节点 删除根节点 删除一般节点 删除整个二叉树 二叉树遍历 6.5 函数模板实现output运算符 6.6 非类型参数模板:常量表达式和默认参数 num_sequence重写 函数地址作为参数 6.7 模板参数化设计策略 LessThan()函数对象模板 潜在问题 如果elemType类型未提供 < 运算符,编译出错! LessThan改进 6.8 模板成员函数 类模板中也可以使用member template function 作业 pp134练习4.5 pp89练习6.2 * * template <typename valType> class Stack { public: bool push( const valType& ); bool pop( valType &elem ); bool peek( valType &elem ); bool empty(); bool full(); int size() { return _stack.size(); } private: vector<valType> _stack; }; :_val() static 多余! 改进方法: 去除&, 传入this指针 加一句: BTnode *tmp = prev; 和 If (tmp->_val > val) tmp->-_rchild = prev; Else tmp->_lchild = prev; template <typename elemType> ostream& BinaryTree<elemType>:: print( ostream &os, void (BinaryTree::*traversal)( ostream& ) const ) const { (this->*traversal)( os ); return os; } template <typename valType> void BTnode<valType>:: inorder( BTnode *pt, ostream &os ) const { if ( pt ) { if ( pt->_lchild ) inorder( pt->_lchild, os ); display_val( pt, os ); if ( pt->_rchild ) inorder( pt->_rchil

文档评论(0)

tangzhaoxu123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档