网站大量收购独家精品文档,联系QQ:2885784924

C++程序设计与实践:11-模板和泛型编程.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 在展示每条动画之前可以提问学生怎么设计代码。 * * * * 类模板 成员类。一个类模板中可能包含一个或多个内部类的定义(注意:不是类对象)。这些类可以是模板,如List类模板中的Node结构体。但也可以不是类模板,只要它们能适合应用的需求。 成员模板。如果类模板中的内部类声明中,有些被冠以template关键字,并且它们的类型参数不依赖于外部模板的类型参数,那么它们将成为类模板中的类模板,这称为“成员模板(member template)”。 template typename T class A { public: class B {}; }; template typename T class A { public: class B { public: template typename U void f(U x) {} }; }; 10.3.3类模板的特化 与函数模板一样,类模板可以被指定类型特化。考虑设计的List类模板,我们可以用float类型去特化它: template class Listfloat { //member declarations }; 模板名和普通模板相同 ListRectangle * lpr; //普通模板 Listint li; //普通模板 Listfloat lf; //特化的模板 10.3.4类模板中的友元 与普通类一样,可以在类模板中声明友元。有三种类型的友元声明: 普通友元 普通模板 特化的模板 class Printer {}; void print() {} ? template typename T class List; template typename T void Tprint(const ListT) {} template typename T class TPrinter {}; ? template typename T class List { //第一种:普通友元 friend class Printer; friend void print(); //第二种:普通模板友元 template typename P friend void Tprint(const ListP); template typename P friend class TPrinter; //第三种:特化的模板友元 friend void TprintRectangle *(const ListRectangle *); friend class TPrinterRectangle *; }; 10.3.5类模板的继承和派生 类模板可以成为其它类的基类。考察在前一章设计的List类,它是抽象类Container的派生类,而Container类依赖于固定类型QUADPTR。如果要把这种继承关系考虑进去,并且要使Container类不依赖于某种特定类型,那么Container类也应该是一个类模板。 template typename T struct Container { virtual Container push_back(const T data) = 0; virtual size_t size() const = 0; virtual operator bool() const = 0; virtual void clear() = 0; }; class List : public ContainerQUADPTR {…}; template typename T class List : public ContainerT {…}; 但这样做会使派生类List依赖于特定类型。 10.4 容器和迭代器 List类(模板)是一种容器(container),用于容纳特定的对象。 一个容器拥有一些典型的操作: 插入元素 删除指定元素 查找指定元素 遍历 其实,删除和查找也可以归类为遍历操作,因为在这些操作工作时,它们都要从头到尾顺序地访问容器中的元素。 迭代操作举例 观察类似于遍历这样的操作,可以发现这些操作的规律:使用一个循环,将每个元素依次从容器中提取出来,然后处理。这样的操作称为“迭代(iteration)”。 以下代码示意了一种典型的针对于数组的迭代操作: int a[10], *p; for (p = a[0]; p != a[10]; ++p) cout *p endl; a[0] a[1] a[2] a[3] … a[9] a[10] p 循环结束,所有元素处理

您可能关注的文档

文档评论(0)

学习让人进步 + 关注
实名认证
内容提供者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档