- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第21讲_程设实习总结.ppt
* 类模板 问题的提出 类模板的定义 模板类的概念 定义类模板的成员函数 使用类模板声明对象 * 类模板 – 问题的提出 为了多快好省地定义出一批相似的类,可以定义类模板,然后由类模板生成不同的类. 考虑一个数组类,需要提供的基本操作 Len():查看数组的长度 getElement(int index):获取其中的一个元素 setElement(int index):对其中的一个元素进行赋值 …… 数组是一种常见的数据类型,元素可以是: 整数 学生 字符串 …… * 类模板– 问题的提出 这些数组类,除了元素的类型不同之外,其他的完全相同; 类模板:在定义类的时候给它一个/多个参数,这个/些参数表示不同的数据类型。在调用类模板时,指定参数,由编译系统根据参数提供的数据类型自动产生相应的模板类 * 类模板的定义 template class T//类模板的首部,声明类模板的参数 class Carray{ T *ptrElement; int size; public: Carray(int length); ~Carray(); int len(); void setElement(T arg, int index); T getElement(index); } template: Carray是一个类模板 声明一个、或多个类型参数,用来定义Carray的属性类型、成员服务的参数类型和返回值类型 * 模板类的概念 模板类:为类模板中各类型参数指定了具体的数据类型后,即得到一个模板类。 编译系统自动用具体的数据类型替换类模板中的类型参数,生成模板类的代码 为类型参数指定的数据类型不同,得到的模板类不同 * 定义类模板的成员函数 定义类模板的成员函数 template class T// T是模板类CarrayT的类型参数 CarrayT::Carray(int length){//模板类CarrayT的构造函数 ptrElement = new T[length]; size = length; } template class T // T是模板类CarrayT的类型参数 CarrayT::~ Carray(){//模板类CarrayT的析构函数 Delete [] ptrElement; } * 定义类模板的成员函数 template class T // T是模板类CarrayT的类型参数 int CarrayT::len(){//模板类CarrayT的成员服务len() return size; } template class T // T是模板类CarrayT的类型参数 void CarrayT:: setElement(T arg, int index) { //模板类CarrayT的成员服务setElement(T arg, int index) *(ptr+index) = arg; return; } template class T // T是模板类CarrayT的类型参数 T CarrayT:: getElement(T arg, int index) { //模板类CarrayT的成员服务getElement(T arg, int index) return *(ptr+index); } * 使用类模板声明对象 Carrayint arrayInt(50), *ptrArrayInt; //创建一个元素类型为int的Carray模板类,并声明该模板类的一个对象、以及一个指针 Carraystring arrayStr(100); //创建一个元素类型为string的Carray模板类,并声明该模板类的一个对象,其中string是C++标准类库中的字符串类 CarrayCStudent *ptrArrayStudent; //创建一个元素类型为CStudent的Carray模板类,并声明该模板类的一个指针,其中CStudent是程序员自定义的一个类 * 使用类模板声明对象 同一个类模板的两个模板类是不兼容的 ptrArrayInt = arrayInt; //ok ptrArrayInt = arrayStr; //error * 函数模板的提出 为了描述一类公共的计算过程,不论数据的类型怎样,该计算过程都可以工作。 * 函数模板和模板函数 编写一个函数模板,由编译系统根据函数调用的实参类型自动产生模板函数 根据函数调用的参数,匹配最合适的函数(包括普通函数、已经创建的模板函数) 如果匹配不成功,找到函数模板,根据实参的类型,创建一个合适的模板函数 由同一个函数模板产生的不同模板函数之间是函数重载关系 * 定义函数模板 template class T T su
文档评论(0)