[计算机]c++实用教程[郑阿奇主编

[计算机]c++实用教程[郑阿奇主编

ID:40004302

大小:131.50 KB

页数:33页

时间:2019-07-17

[计算机]c++实用教程[郑阿奇主编_第1页
[计算机]c++实用教程[郑阿奇主编_第2页
[计算机]c++实用教程[郑阿奇主编_第3页
[计算机]c++实用教程[郑阿奇主编_第4页
[计算机]c++实用教程[郑阿奇主编_第5页
资源描述:

《[计算机]c++实用教程[郑阿奇主编》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第15章模板15.1函数模板15.1.1函数模板定义函数模板的定义包括两部分:一是模板(类型参数)声明部分,二是函数自身声明或定义部分。其中:(1)template是C++关键字,表示声明的是模板。(2)由一对“<>”尖括号构成的是该模板的类型参数表,其中可以有一个或多个类型参数,但多个类型参数之间需用逗号“,”分隔。(3)每个类型参数可以由C++关键字class和类型名组成,或由一般具体类型和类型名组成,其中类型名一定要符合C++命名规则。说明(1)在类型参数声明中,由于class是类声明关键字,为了避免混淆,在ANSI/ISOC++中,往

2、往将class关键字用typename关键字代替(2)函数模板的定义可像函数那样将声明和实现两部分分别进行(3)对于在模板声明部分声明的类型名来说,若模板声明部分是在函数模板原型声明前面,则类型名的作用域仅在函数模板原型范围内;若模板声明部分是在函数模板定义或实现前面,则类型名的作用域是该函数的作用域范围15.1.2函数模板实例化函数模板的实例化分为隐式实例化和显式实例化1.隐式实例化#includeusingnamespacestd;template//定义函数模板T1sum(T1x,T

3、2y){returnx+y;}intmain(){cout<usingnamespacestd;template//定义函数模

4、板T1sum(T1x,T2y){returnx+y+ZZZ;}intmain(){cout<(2,'a')<(2,5.5)<

5、数操作应重写其具体化代码,称为函数模板的具体化(Specialization)。15.1.4函数模板重载函数模板重载能允许多个同名的函数模板存在,但同名的各个函数模板的模板声明部分的形参和函数头中的形参必须有区别:要么形参的个数不同,要么形参的个数相同但参数的通用类型名不同要注意函数模板重载后,其实例化不能出现“二义性”当同名普通函数和同名函数模板同时出现在代码中时,要注意调用的优先级[例Ex_TSwap]函数模板的重载示例。#include#includeusingnamespacestd;classC

6、Name{char*name;//姓名public:CName(char*str=NULL){if(str){name=newchar[strlen(str)+1];strcpy(name,str);}}~CName(){if(name){delete[]name;name=NULL;}}voidSetName(char*str){if(name){delete[]name;name=NULL;}if(str){name=newchar[strlen(str)+1];strcpy(name,str);}}char*GetName(void){

7、returnname;}};template//定义第1个函数模板voidmyswap(T&a,T&b){Ttemp;temp=a;a=b;b=temp;cout<<"调用引用参数的函数模板!ID="<//定义第2个函数模板voidmyswap(T*a,T*b){Ttemp;temp=*a;*a=*b;*b=temp;cout<<"调用地址参数的函数模板!ID="<//A:函数模板具体化voidmyswap<

8、CName,int>(CName&a,CName&b){char*temp=newchar[strlen(a.GetName())+1];strcpy(temp,a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。