欢迎来到天天文库
浏览记录
ID:15897999
大小:2.01 MB
页数:155页
时间:2018-08-06
《c进阶课程讲义v1.0.》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、轻松入门实战应用传智播客C++课程传智播客C++进阶课程讲义传智扫地僧6、函数模板和类模板前言C++提供了函数模板(functiontemplate)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。1)C++提供两种模板机制:函数模板、类模板2)类属——类型参数化,又称参数模板使
2、得程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递。总结:Ø模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。Ø模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。轻松入门实战应用传智播客C++课程6.1函数模板6.1.1为什么要有函数模板需求:写n个函数,交换char类型、int类型、double类型变量的值。案例:#includeusingnamespacestd;/*voidmyswap(int&a,int&b){intt=a;a=b;b
3、=t;}voidmyswap(char&a,char&b){chart=a;a=b;b=t;}*///template关键字告诉C++编译器我要开始泛型了.你不要随便报错//数据类型T参数化数据类型templatevoidmyswap(T&a,T&b){Tt;t=a;a=b;b=t;}voidmain(){//chara='c';intx=1;inty=2;myswap(x,y);//自动数据类型推导的方式轻松入门实战应用传智播客C++课程floata=2.0;floatb=3.0;myswap(a,
4、b);//自动数据类型推导的方式myswap(a,b);//显示类型调用cout<<"hello..."<类型形式参数的形式为:typenameT1,typenameT2,……,typenameTn或classT1,classT2,……,classTn函数模板调用myswap(a,b);//显示类型调用myswap(a,b);//自动数据类型推导轻松入门实战应用传智
5、播客C++课程6.1.3函数模板和模板函数6.1.4函数模板做函数参数#includeusingnamespacestd;templatevoidsortArray(T*a,T2num){Ttmp;inti,j;for(i=0;ivoidpir
6、ntArray(T*a,intnum){inti=0;for(i=0;i(a,num);sortArray(a,num);//显示类型调用模板函数<>printf("排序之后");pirntArray(a,num);cout<<"hello..."<7、l;system("pause");return;}6.1.5函数模板遇上函数重载函数模板和普通函数区别结论:/*函数模板不允许自动类型转化普通函数能够进行自动类型转换*/函数模板和普通函数在一起,调用规则:/*1函数模板可以像普通函数一样被重载2C++编译器优先考虑普通函数3如果函数模板可以产生一个更好的匹配,那么选择模板4可以通过空模板实参列表的语法限定编译器只通过模板匹配*/轻松入门实战应用传智播客C++课程案例1:#includeusingnamespacestd;template8、meT>voidmyswap(T&a,T&b){Tt;t=a;a=b;b=t;cout<<"myswap模板函数do"<
7、l;system("pause");return;}6.1.5函数模板遇上函数重载函数模板和普通函数区别结论:/*函数模板不允许自动类型转化普通函数能够进行自动类型转换*/函数模板和普通函数在一起,调用规则:/*1函数模板可以像普通函数一样被重载2C++编译器优先考虑普通函数3如果函数模板可以产生一个更好的匹配,那么选择模板4可以通过空模板实参列表的语法限定编译器只通过模板匹配*/轻松入门实战应用传智播客C++课程案例1:#includeusingnamespacestd;template8、meT>voidmyswap(T&a,T&b){Tt;t=a;a=b;b=t;cout<<"myswap模板函数do"<
8、meT>voidmyswap(T&a,T&b){Tt;t=a;a=b;b=t;cout<<"myswap模板函数do"<
此文档下载收益归作者所有