软件工程面向对象编程第三次课模板编程.ppt

软件工程面向对象编程第三次课模板编程.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象的程序设计 第三讲 <续>模板编程 华中科技大学CAD中心 王彦伟 wuyz@ 回顾 STL容器类:vectorint 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: vectorstring _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运算符 二叉树实例 Binerytree工程 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: vectorvalType _stack; }; :_val() static 多余! 改进方法:去除, 传入this指针 3) 加一句: BTnode *tmp = prev; 和 4) if (tmp-_val val) tmp--_rchild = prev; else tmp-_lchild = prev; template typename elemType ostream BinaryTreeelemType:: print( ostream os, void (BinaryTree::*traversal)( ostream ) const ) const { (this-*traversal)( os ); return os; } template typename valType void BTnodevalType:: inorder( BTnode *pt, ostream os ) const { if ( pt ) { if ( pt-_lchild ) inorder( pt-_lchild, os ); display_val( pt, os ); if ( pt-_rchild ) inorder( pt-_rchild, os ); }

文档评论(0)

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

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

1亿VIP精品文档

相关文档