- 1、本文档共51页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 循环结束,所有元素处理
您可能关注的文档
- 电工学课件:第七章 电动机.ppt
- C++程序设计与数据结构基础:第1章 C++程序设计基础.ppt
- C++程序设计与数据结构基础:第2章 C++简单程序设计.ppt
- C++程序设计与数据结构基础:第3章 数组与指针.ppt
- C++程序设计与数据结构基础:第5章 类和对象.ppt
- C++程序设计与数据结构基础:第6章 继承和派生类.ppt
- C++程序设计与数据结构基础:第7章 多态性和虚函数.ppt
- C++程序设计与数据结构基础:第8章 C++ IO流标准库.ppt
- C++程序设计与数据结构基础:第10章 非线性结构.ppt
- C++程序设计与数据结构基础:第11章 查找和排序.ppt
- 2024年陕西咸阳亨通电力(集团)有限公司供电服务业务部直聘用工招聘145人笔试参考题库附带答案详解 .docx
- 2024年中建四局土木工程有限公司校园招聘笔试参考题库附带答案详解 .docx
- 2024年四川雅茶贸易有限公司公开招聘和考察聘用人员3人笔试参考题库附带答案详解 .docx
- 2024年中国烟草总公司辽宁省公司公开招聘拟录用人员(166人)笔试参考题库附带答案详解 .docx
- 2024江苏连云港中诚物业管理有限公司招聘工作人员1人笔试参考题库附带答案详解 .docx
- [毕节]2025年贵州毕节市引进人才649人笔试历年参考题库附带答案详解.docx
- 2024年度中国东航技术应用研发中心有限公司校园招聘笔试参考题库附带答案详解 .docx
- 2024年福建省厦门盐业有限责任公司春季人才招聘1人笔试参考题库附带答案详解 .docx
- 2024年山东省环保发展集团绿能有限公司职业经理人招聘2人笔试参考题库附带答案详解 .docx
- 2024年安徽滁州郊源阳光电力维修工程有限责任公司招聘41人(第一批次)笔试参考题库附带答案详解 .docx
文档评论(0)