软件技术基础作业—模板编程.pptx
《软件技术基础作业—模板编程.pptx》由会员分享,可在线阅读,更多相关《软件技术基础作业—模板编程.pptx(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、主要内容模板的概念函数模板类模板软件技术基础软件技术基础补充补充22模板模板 1 1Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第1页/共32页1 模板的概念模板的引入软件技术基础软件技术基础补充补充22模板模板 2 2class Compare_intpublic:Compare(int a,int b)x=a;y=b;int max()return(xy)?x:y;int min()return(xy)?x:y
2、;float min()return(xy)?x:y;private:float x,y;这两个类的功能是对两个整数这两个类的功能是对两个整数(浮点数浮点数)作比较,可以通过调用成员函作比较,可以通过调用成员函数数max和和min得到两个整数中的大者和小者。得到两个整数中的大者和小者。两个或多个类,其功能是相同的,仅仅是数据类型不同,能否有办法两个或多个类,其功能是相同的,仅仅是数据类型不同,能否有办法减少重复性的工作减少重复性的工作?Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Co
3、pyright 2004-2011 Aspose Pty Ltd.第2页/共32页1 模板的概念软件技术基础软件技术基础补充补充22模板模板 3 3C+C+在发展的后期增加了在发展的后期增加了模板模板(template)(template)的功能,提供了解决这类问题的的功能,提供了解决这类问题的途径。可以声明一个通用的类模板,它可以有一个或多个虚拟的类型参数。途径。可以声明一个通用的类模板,它可以有一个或多个虚拟的类型参数。如对以上两个类可以综合写出以下的类模板:如对以上两个类可以综合写出以下的类模板:template /声明一个模板,虚拟类型名为声明一个模板,虚拟类型名为numtypecla
4、ss Compare /类模板名为类模板名为Comparepublic:Compare(numtype a,numtype b)x=a;y=b;numtype max()return(xy)?x:y;numtype min()return(xy)?x:y;private:numtype x,y;Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第3页/共32页1 模板的概念软件技术基础软件技术基础补充补充22模板模板 4
5、 4请将此类模板和前面第一个请将此类模板和前面第一个Compare_int类作一比较,可以看到有两处不同:类作一比较,可以看到有两处不同:(1)声明类模板时要增加一行:声明类模板时要增加一行:template(2)原有的类型名原有的类型名int换成虚拟类型参数名换成虚拟类型参数名numtype在建立类对象时,如果将实际类型指定为在建立类对象时,如果将实际类型指定为int型,编译系统就会用型,编译系统就会用int取代所有取代所有的的numtype,如果指定为,如果指定为float型,就用型,就用float取代所有的取代所有的numtype,这样就能实现,这样就能实现“一类多用一类多用”。如果说如
6、果说类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模板的实例板的实例。利用类模板可以建立含各种数据类型的类。利用类模板可以建立含各种数据类型的类。Compare cmp(4,7);即在类模板名之后在尖括号内指定实际的类型名,在进行编译时,编译系统即在类模板名之后在尖括号内指定实际的类型名,在进行编译时,编译系统就用就用int取代类模板中的类型参数取代类模板中的类型参数numtype,这样就把类模板具体化了,或者说实,这样就把类模板具体化了,或者说实例化了。例化了。Evaluation only.Created with A
7、spose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第4页/共32页1 模板的概念软件技术基础软件技术基础补充补充22模板模板 5 5/CH9_1.cpptemplate /声明一个模板,虚拟类型名为声明一个模板,虚拟类型名为numtypeclass Compare /类模板名为类模板名为Comparepublic:Compare(numtype a,numtype b)x=a;y=b;numtype max()return(xy)?x:y;numtype min()return(
8、xy)?x:y;private:numtype x,y;#include int main()Compare cmp_i(4,7);int imax=cmp_i.max();cout Max:imaxendl;Compare cmp_f(4.5,4.49);float fmax=cmp_f.max();cout Max:fmaxendl;return 1;Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第5页/共32页
9、1 模板的概念模板概念它可以实现类型参数化,即把函数或类中的数据类型定义为参数,从而解决参数多态性问题,实现代码可重用性模板分类(按用途)函数模板类模板参数实例化指给函数模板或类模板带入实际的类型参数C+中把经过参数实例化的函数模板称为模板函数,把经过参数实例化的类模板称为模板类软件技术基础软件技术基础补充补充22模板模板 6 6Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第6页/共32页1 模板的概念模板、模板函
10、数、模板类和对象之间的关系软件技术基础软件技术基础补充补充22模板模板 7 7模板函数模板类模板模板函数模板类对象对象对象参数实例化参数实例化参数实例化参数实例化Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第7页/共32页2 函数模板函数模板的定义软件技术基础软件技术基础补充补充22模板模板 8 8一般定义格式:一般定义格式:template 返回类型返回类型 函数名函数名(函数模板形参表函数模板形参表)函数体函数
11、体 设计一个求两个数中较大数的函数模板设计一个求两个数中较大数的函数模板template T max(T x,T y)return(xy)?x:y;template T max(T x,T y)return(xy)?x:y;Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第8页/共32页2 函数模板模板函数的生成(函数模板的实例化)基本概念函数模板在具体调用时必须进行参数实例化经参数实例化而生成的具体函数称为模板函数对
12、模板形参进行实例化的参数称为模板实参生成模板函数的方法显式方法:在函数模板调用前,用基本数据类型或用户自定义数据类型对函数模板进行参数实例化,生成模板函数软件技术基础软件技术基础补充补充22模板模板 9 9int myIntX=5,myIntY=8,myIntC;float myFloatX=5.6,myFloatY=8.9,myFloatC;int max(int x,int y);myIntC=max(myIntX,myIntY);float max(float x,float y);myFloatC=max(myFloatX,myFloatY);Evaluation only.Creat
13、ed with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第9页/共32页2 函数模板模板函数的生成(函数模板的实例化)生成模板函数的方法隐式方法:直接传递实参进行函数调用,在函数模板调用时,由编译系统根据调用函数的实际参数的数据类型自动进行参数实例化,生成模板函数函数模板与同名的非模板函数的调用规则(1)对一个实际的函数调用,首先寻找一个参数完全匹配的函数,若找到就调用它(2)在(1)失败后,寻找一个函数模板,使其实例化,产生一个匹配的模板函数,若找到就调用它软件技术
14、基础软件技术基础补充补充22模板模板 1010int a=10,b=20,c;c=max(a,b);Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第10页/共32页2 函数模板函数模板与同名的非模板函数的调用规则在(1)和(2)均失败后,再试一试低一级的对函数的重载方法,例如通过类型转换可产生参数匹配等,若找到就调用它若(1),(2),(3)均失败,则这是一个错误的调用软件技术基础软件技术基础补充补充22模板模板 1
15、111/CH9_2.cpp#include template /A 函数模板T max(T x,T y)couttemplate function.y)?x:y;int max(int x,int y)/B 函数 coutoverload,int,int.y)?x:y;Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第11页/共32页2 函数模板软件技术基础软件技术基础补充补充22模板模板 1212char max(i
16、nt x,char y)/C 函数重载 coutoverload,int,char.y)?x:y;int main()int i=10;char c=a;float f=43.74f;max(i,i);max(c,c);max(i,c);max(c,i);max(f,f);max(f,i);return 1;int main()int i=10;char c=a;float f=43.74f;max(i,i);/B max(c,c);/A max(i,c);/C max(c,i);/C max(f,f);/A max(f,i);/C return 1;Evaluation only.Creat
17、ed with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第12页/共32页作业6参考在前面求最大值模板,编写类型比较的函数模板,实现不同类型比较的Compare模板函数。软件技术基础软件技术基础补充补充11面向对象面向对象 1313Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第13页/共3
18、2页3 类模板类模板的概念一个类模板(类属类)是一个带参数的类类模板允许用户为类定义一种模式,使得类中的某些成员变量、某些成员函数的参数或返回值,能取任意数据类型(包括系统预定义的和用户自定义的类型)类模板的设计软件技术基础软件技术基础补充补充22模板模板 1414template class 类名类名/;template是一个声明模板的关键字模板形参表可包括一个或一个以上的模板参数。每个模板参数前加关键字class。例如:class T1,class T2,Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profil
19、e 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第14页/共32页3 类模板类模板的设计在类定义中参数化的数据类型用模板形参表示软件技术基础软件技术基础补充补充22模板模板 1515template class Complex T real;T imag;public:Complex(T x=0,T y=0);Complex Add(const Complex x);Evaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2
20、011 Aspose Pty Ltd.第15页/共32页3 类模板类模板的设计在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则需在函数体外进行模板声明,并在函数名前的类名后缀上软件技术基础软件技术基础补充补充22模板模板 1616template /模板声明模板声明Complex:Complex(T x,T y)real=x;imag=y;template /模板声明模板声明Complex:Add(const Complex x)return Complex(real+x.real,imag+x.imag);注意:注意:类模板定义前和每个外联函数形式的成员函数模板前,都要加类模板定
21、义前和每个外联函数形式的成员函数模板前,都要加语句语句:template;原来程序中为原来程序中为Complex的地方,均应改为:的地方,均应改为:ComplexEvaluation only.Created with Aspose.Slides for.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第16页/共32页3 类模板软件技术基础软件技术基础补充补充22模板模板 1717/TComplex.h#include template class Complexprivate:T real;T imag;p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件技术 基础 作业 模板 编程
限制150内