《第1章CC++.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文档。上传文档
查看更多
对函数体完全相同,只是形参的类型不同的函数,C++语言中可以使用函数模板来避免在程序中多次书写相同的代码。所谓函数模板实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就成为函数模板。 而函数模板提供了传递类型的机制。 使用函数模板的方法是先说明函数模板,然后实例化成相应的模板函数进行调用执行。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型。 ●函数模板 定义函数模板的一般形式如下: templatetypename T 或templateclass T 返回值类型 函数名 (模板函数形参表) { // 函数定义体 } Template的含义是“模板”,模板参数表尖括号中先写关键字 class 或 typename后加一个参数类型T构成,在这里两个关键字的意义相同,它们表示后面的参数名代表一个基本数据类型或用户定义的类型,为避免class与C++中的类混淆,新加入了typename。T是一个虚拟的类型名,用T是习惯问题。 ●函数模板 模板参数表尖括号中不能为空,参数可以有多个,用逗号分开。每个类型形参都要使用class或typename。 如:“templateclass T1,class T2”。 函数模板定义不是一个实实在在的函数,编译系统不为其产生任何执行代码。该定义只是对函数的描述,表示它每次能单独处理在类型形式参数表中说明的数据类型。 ●函数模板 int main() {int i1=8,i2=5,i3=6,i; double d1=56.9,d2=90.765,d3=43.1,d; long g1=67843,g2=-456,g3=78123,g; i=max(i1,i2,i3); d=max(d1,d2,d3); g=max(g1,g2,g3); … … } ●函数模板 函数模板方法克服了C语言用大量不同函数名表示相似功能的坏习惯;克服了宏定义不能进行参数类型检查的弊端;克服了C++函数重载用相同函数名字重写几个函数的烦琐。 用函数模板比函数重载更方便,但它只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板。 当模板函数与重载函数同时出现在一个程序体内时,C++编译器的求解次序是先调用重载函数;如果不匹配,则调用模板函数;如果还不匹配则进行强制类型转换,前面几种方法都不对,则最后报告出错。 4.如果在声明时给了默认值,而定义函数时又对形参给出默认值,有的系统回给出报错信息,有的不报错,以先遇到的为准.由于声明在前,所以以函数声明给出的为准.为了避免混淆,最好在函数声明时给出。 5.一个函数不能既作为重载函数,又作为默认参数的函数。因为在函数调用时如果少写一个参数,系统将无法判断是重载函数还是利用默认参数的函数,出现二义性。例如1.7改为: int max(int a,int b,int c=100); max既作为重载函数,又作为默认参数的函数。 如果一函数调用max(5,23),则系统无法判定调用哪个。 3.引用的简单说明 4)怎样区分是声明引用变量还是取地址的操作? 当a的前面有类型符时,它必然是引用的声明; 否则是取地址运算。 #include iostream using namespace std; void swap(int a, int b) {int temp; temp=a; a=b; b=temp; } //实现a,b交换 #include iostream using namespace std; void swap(int *p1, int *p2) {int temp; temp= *p1; *p1 = *p2; *p2 =temp; } #include iostream using namespace std; void swap(int a, int b) {int temp; temp= a; a = b; b =temp; } //实现a,b交换 5.对引用的进一步说明 不能建立void类型的引用,如 void a=9 //错误 因为任何一个变量都是有类型的。 不能建立引用的数组,如 char c[6]=“hello”; char rc[6]=c; //错误 建立一个包含6个元素的引用的数组,是不行的,因为数组名c只代表数组首元素的地址,不占存储空间。 可以将变量的引用的地址赋给一个指针,此时指针指向原来的变量。但不能定义指向引用类型的指针变量。 可以建立指针变量的引用。 5.对引用的进一步说明 可以用const对引用加以限定

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档