欢迎来到天天文库
浏览记录
ID:27724559
大小:1.09 MB
页数:39页
时间:2018-12-04
《[其它技巧]类模板》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、10.1函数模板10.2类模板10.3标准模板库第14章模板与标准模板库模板模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。C++的标准模板库STL(StandardTemplateLibrary)已经成为一个标准,它包含容器,算法以及迭代子(或称迭代器)。本章首先探讨函数模板和类模板,然后介绍C++标准模板库的使用。函数模板的语法形式如下:template函数定义利用函数模板,可以建立一个具有通用功能的函数
2、,支持不同的函数参数和返回值,达到减少代码书写量的目的。T代表在函数模板中要使用的通用类型,在该函数的调用过程中,T被具体化。【10.1函数模板】templateTabs(Tvalue){returnvalue>0?value:-value;}例如重载函数,求绝对值的函数只要声明一个函数模板:intmain(){intnValue=-1,nResult;doubledblValue=-1.2,dblResult;nResult=abs(nValue);dblResult=abs(dblValue);co
3、ut<4、,修改过程中也很容易出现各种疏漏。用一种类似函数模板的机制来结决问题——类模板。C++语言中的类模板的语法定义如下:Template<模板参数表>类声明当模板参数表中同时包含上述多项内容时,各项内容之间以逗号隔开。注与函数模板相同,类模板只有使用的时候才被具体化为某一种类型。使用模板类来产生对象时,按如下形式声明:模板<模板参数表>对象名1,......对象名n;模板参数表中的内容可以为:class标识符类型说明符标识符【10.2类模板】类模板举例//EXAMPLE10_02.H#ifndefEXAMPLE10_02_H#d5、efineEXAMPLE10_02_HtemplateclassMax//声明类模板Max{private:Titem1,//类型为T,T在该类的对象生成时具体化item2,item3;public:Max(){}Max(Tthefirst,Tthesecond,Tthethird);TGetMaxItem();//求得3个元素中的最大值并按类型T返回voidSetItem(Tthefirst,Tthesecond,Tthethird);//设置类中的3个元素的值}#endif//EXAMPLE10_02B.6、H例10-2//类模板的实现#ifndefEXAMPLE10_02B_H#defineEXAMPLE10_02B_HtemplateTMax::Max(Tthefirst,Tthesecond,Tthethird):item1(thefirst),item2(thesecond),item3(thethird){return;}templatevoidMax::SetItem(Tthefirst,Tthesecond,Tthethird){item1=thefirst;item2=7、thesecond;item3=thethird;}templateTMax::GetMaxItem()(续){Tmaxitem;maxitem=item1>item2?item1:item2;maxitem=maxitem>item3?maxitem:item3;returnmaxitem;}#endif//EXAMPLE10_2.CPP//主程序#include#include″EXAMPLE1002.H″#include″EXAMPLE1002B.H″intmain(){M8、axnmyMax(1,2,3);MaxdblmyMax(1.2,1.3,-1.4);cout<
4、,修改过程中也很容易出现各种疏漏。用一种类似函数模板的机制来结决问题——类模板。C++语言中的类模板的语法定义如下:Template<模板参数表>类声明当模板参数表中同时包含上述多项内容时,各项内容之间以逗号隔开。注与函数模板相同,类模板只有使用的时候才被具体化为某一种类型。使用模板类来产生对象时,按如下形式声明:模板<模板参数表>对象名1,......对象名n;模板参数表中的内容可以为:class标识符类型说明符标识符【10.2类模板】类模板举例//EXAMPLE10_02.H#ifndefEXAMPLE10_02_H#d
5、efineEXAMPLE10_02_HtemplateclassMax//声明类模板Max{private:Titem1,//类型为T,T在该类的对象生成时具体化item2,item3;public:Max(){}Max(Tthefirst,Tthesecond,Tthethird);TGetMaxItem();//求得3个元素中的最大值并按类型T返回voidSetItem(Tthefirst,Tthesecond,Tthethird);//设置类中的3个元素的值}#endif//EXAMPLE10_02B.
6、H例10-2//类模板的实现#ifndefEXAMPLE10_02B_H#defineEXAMPLE10_02B_HtemplateTMax::Max(Tthefirst,Tthesecond,Tthethird):item1(thefirst),item2(thesecond),item3(thethird){return;}templatevoidMax::SetItem(Tthefirst,Tthesecond,Tthethird){item1=thefirst;item2=
7、thesecond;item3=thethird;}templateTMax::GetMaxItem()(续){Tmaxitem;maxitem=item1>item2?item1:item2;maxitem=maxitem>item3?maxitem:item3;returnmaxitem;}#endif//EXAMPLE10_2.CPP//主程序#include#include″EXAMPLE1002.H″#include″EXAMPLE1002B.H″intmain(){M
8、axnmyMax(1,2,3);MaxdblmyMax(1.2,1.3,-1.4);cout<
此文档下载收益归作者所有