欢迎来到天天文库
浏览记录
ID:50350246
大小:105.50 KB
页数:17页
时间:2020-03-08
《C++面向对象程序设计 教学课件 作者 陈维兴 等 第8章 模板.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章模板8.1模板的概念模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码重用。模板分为函数模板和类模板,它们分别允许用户构造模板函数和模板类。8.2函数模板与模板函数8.2.1函数模板的说明函数模板的一般说明形式如下:template返回类型函数名(模板形参表){函数体}其中,template是一个声明模板的关键字,它表示声明一个模板。例如,将求最大值函数max()定义成函数模板,如下所示:templateTmax(Tx,Ty){return(x>
2、y)?x:y;}也可以定义成如下形式:templateTmax(Tx,Ty){return(x>y)?x:y;}其中,T为类型参数,它既可取系统预定义的数据类型,又可以取用户自定义的类型。8.2.2函数模板的使用将T实例化的参数称为模板实参,用模板实参实例化的函数称为模板函数。当编译系统发现有一个函数调用:函数名(模板实参表);时,将根据模板实参表中的类型生成一个函数即模板函数。该模板函数的函数体与函数模板的函数定义体相同。例8.1函数模板的使用。#includetemplate3、sT>Tmax(Tx,Ty){return(x>y)?x:y;}main(){inti1=10,i2=56;floatf1=12.5,f2=24.5;doubled1=50.344,d2=4656.346;charc1='k',c2='n';cout<<"Themaxofi1,i2is:"<4、is:"<templatevoidmyfunc(type1x,type2y){cout<5、对类对象产生作用的基本运算符进行重载。#includeclassnumber{public:number(intx1,inty1){x=x1;y=y1;}intgetx(){returnx;}intgety(){returny;}intoperator>(number&c);private:intx,y;};intnumber::operator>(number&c){if(x+y>c.x+c.y)return1;return0;}templateobj&max(obj&o1,obj&o2)6、{if(o1>o2)returno1;returno2;}voidmain(){inti1=5,i2=55;cout<<"较大的数:"<7、ate开始,然后是类名,其格式如下:templateclass类名{//…};类模板不是代表一个具体的、实际的类,而是代表着一类类。实际上,类模板的使用就是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型>对象名;例8.5使用栈类模板的使用。#includeconstintsize=10;template//声明一个类模板classstack{public:voidinit(){tos=0;}voidpush(Typech);//参数取Type类型Typep8、op();//返回类型取Type类型private:Typestck[size];//数组的类型为类型参数Type,即可取任意类型inttos;};templatevoidstack::
3、sT>Tmax(Tx,Ty){return(x>y)?x:y;}main(){inti1=10,i2=56;floatf1=12.5,f2=24.5;doubled1=50.344,d2=4656.346;charc1='k',c2='n';cout<<"Themaxofi1,i2is:"<4、is:"<templatevoidmyfunc(type1x,type2y){cout<5、对类对象产生作用的基本运算符进行重载。#includeclassnumber{public:number(intx1,inty1){x=x1;y=y1;}intgetx(){returnx;}intgety(){returny;}intoperator>(number&c);private:intx,y;};intnumber::operator>(number&c){if(x+y>c.x+c.y)return1;return0;}templateobj&max(obj&o1,obj&o2)6、{if(o1>o2)returno1;returno2;}voidmain(){inti1=5,i2=55;cout<<"较大的数:"<7、ate开始,然后是类名,其格式如下:templateclass类名{//…};类模板不是代表一个具体的、实际的类,而是代表着一类类。实际上,类模板的使用就是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型>对象名;例8.5使用栈类模板的使用。#includeconstintsize=10;template//声明一个类模板classstack{public:voidinit(){tos=0;}voidpush(Typech);//参数取Type类型Typep8、op();//返回类型取Type类型private:Typestck[size];//数组的类型为类型参数Type,即可取任意类型inttos;};templatevoidstack::
4、is:"<templatevoidmyfunc(type1x,type2y){cout<5、对类对象产生作用的基本运算符进行重载。#includeclassnumber{public:number(intx1,inty1){x=x1;y=y1;}intgetx(){returnx;}intgety(){returny;}intoperator>(number&c);private:intx,y;};intnumber::operator>(number&c){if(x+y>c.x+c.y)return1;return0;}templateobj&max(obj&o1,obj&o2)6、{if(o1>o2)returno1;returno2;}voidmain(){inti1=5,i2=55;cout<<"较大的数:"<7、ate开始,然后是类名,其格式如下:templateclass类名{//…};类模板不是代表一个具体的、实际的类,而是代表着一类类。实际上,类模板的使用就是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型>对象名;例8.5使用栈类模板的使用。#includeconstintsize=10;template//声明一个类模板classstack{public:voidinit(){tos=0;}voidpush(Typech);//参数取Type类型Typep8、op();//返回类型取Type类型private:Typestck[size];//数组的类型为类型参数Type,即可取任意类型inttos;};templatevoidstack::
5、对类对象产生作用的基本运算符进行重载。#includeclassnumber{public:number(intx1,inty1){x=x1;y=y1;}intgetx(){returnx;}intgety(){returny;}intoperator>(number&c);private:intx,y;};intnumber::operator>(number&c){if(x+y>c.x+c.y)return1;return0;}templateobj&max(obj&o1,obj&o2)
6、{if(o1>o2)returno1;returno2;}voidmain(){inti1=5,i2=55;cout<<"较大的数:"<7、ate开始,然后是类名,其格式如下:templateclass类名{//…};类模板不是代表一个具体的、实际的类,而是代表着一类类。实际上,类模板的使用就是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型>对象名;例8.5使用栈类模板的使用。#includeconstintsize=10;template//声明一个类模板classstack{public:voidinit(){tos=0;}voidpush(Typech);//参数取Type类型Typep8、op();//返回类型取Type类型private:Typestck[size];//数组的类型为类型参数Type,即可取任意类型inttos;};templatevoidstack::
7、ate开始,然后是类名,其格式如下:templateclass类名{//…};类模板不是代表一个具体的、实际的类,而是代表着一类类。实际上,类模板的使用就是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型>对象名;例8.5使用栈类模板的使用。#includeconstintsize=10;template//声明一个类模板classstack{public:voidinit(){tos=0;}voidpush(Typech);//参数取Type类型Typep
8、op();//返回类型取Type类型private:Typestck[size];//数组的类型为类型参数Type,即可取任意类型inttos;};templatevoidstack::
此文档下载收益归作者所有