C Primer类模板.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CPrimer类模板ppt课件

类模板的特化及部分特化(续) 格式:以关键字template开始,后面是尖括号中的模板 参数表。 注意:①部分特化的模板参数表只列出模板实参仍然未 知的那些参数。 ②类模板部分特化是被隐式实例化的。编译器选择“针 对该实例而言最为特化的模板定义”进行实例化,当没 有特化可被使用时,才使用通用模板定义。 例:Graphics24,90 figure; 它即能从通用类模板定义被实例化,也能从部分特化的 定义被实例化,但编译器选择的是部分特化来实例化模 板。 ③类模板部分特化必须有它自己对成员函数、静态数据成员和嵌套类的定义。 八、名字空间和类模板 类模板定义也可以被放在名字空间中。例如: Namespace cplusplus_primer{ Templateclass type Class Graphics{…}; Templateclass type Type create() {…} } 当类模板名字Graphics被用在名字空间之外时,它必须被 名字空间名cplusplus_primer限定修饰,或者通过一个using声明或指示符被引入。例如: 名字空间和类模板(续) Void main() { using cplusplus_primer::Graphics; Graphicsint *pg=new Graphicsint; //… } 注意:在名字空间中声明类模板也会影响该类模板及其成员的特化和部分特化声明的方式,类模板或类模板成员的特化声明必须被声明在定义通用模板的名字空间中(可以在名字空间之外定义模板特化)。 一个实例 书上讲到了一个关于队列的例子,下面将其代码 整理如下:(注意:书上P686类QueueItem中还要 增加如下友元声明:friend ostream operator(ostream os, const QueueType q);)。 #include iostream.h template class Type class QueueItem; template class Type class Queue { public: friend ostream operator(ostream os,const QueueType q); Queue() : front( 0 ), back ( 0 ) { } ~Queue(){} 一个实例(续) void add( const Type ); bool is_empty() const { return front == 0; } Type remove(); private: QueueItemType *front; QueueItemType *back; }; template class Type class QueueItem { public: QueueItem(Type val){item=val;next=0;} friend class QueueType; friend ostream operator(ostream os,const QueueType q); friend ostream operator(ostream os,const QueueItemType qi); 一个实例(续) private: Type item; QueueItem *next; }; template class Type void QueueType::add(const Type val) { QueueItemType *pt =new QueueItemType(val); if ( is_empty() ) front = back = pt; else { back-next = pt; back = pt; } } 一个实例(续) template class Type Type QueueType::remove() { if ( is_empty() ) { cerr remove() on empty queue \n; exit(-1); } QueueItemType *pt = front; front = front-next; Type retval = pt-item; delete pt; return retval; } 一个实例(续) template class Type ostream operator(ostream os, const QueueType q) //输出队列成员 { os ; QueueItemType *p; for ( p = q.front; p; p = p-next ) os

文档评论(0)

118zhuanqian + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档