《模板——批量生产.ppt》由会员分享,可在线阅读,更多相关《模板——批量生产.ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、模板批量生产,湖南大学信息科学与工程学院,C+程序设计,C+howtoprogramming,Outlines,模板概述函数模板类模板STL编程实例Casestudy:证券业绩报表小结,模板简介,心型的蛋糕班服工厂的模具.通过模板机制,以类型为参数,可利用一个代码段来指定一组相关函数(模板函数)或一组相关类(模板类)。如果对于不同的数据类型执行相似的操作,使用模板机制更简洁。提高重用性,常见于通用数据结构和算法。,函数模板,/求两个整数的最大值intmax(inta,intb)returnab?a:b;/求两个浮点数的最大值floatmax(floata,floatb)returnab?a:b
2、;/求两个字符串的最大值#includestringmax(stringa,stringb)returnab?a:b;,当函数实现相同,而处理的对象类型不同的时候,通常考虑使用函数模板,函数模板,函数模板的定义格式template(参数表)/求两个数的最大值templateTMax(Ta,Tb)Tresult=ab?a:b;returnresult;,/指明下列代码段使用了模板机制,/形参类型用参数T表示,/返回值类型用参数T表示,/局部变量类型用参数T表示,函数模板,intmain()inti1=3,i2=5;doubled1=3.3,d2=5.2;stringstr1(xjtu),str2
3、(xian);coutTypeint:Max(i1,i2)isMax(i1,i2)endl;coutTypeDouble:Max(d1,d2)isMax(d1,d2)endl;coutTypestring:Max(str1,str2)isMax(str1,str2)endl;return0;,/根据实参的类型生成具体的函数,Case1,请编写一个输出函数模板,并测试int、char、student类型。,templatevoidprint(Ta)coutaendl;intmain()inti=3;charc(a);students(zhang,10);print(i);print(c);pri
4、nt(s);,classstudentpublic:student(stringn,inty)name=n;year=y;stringname;intyear;,friendostream,templatevoidprint(T*array,intsize)for(inti=0;isize;i+)coutarrayi;,intmain()intacount=4;intbcount=6;intccount=3;intaacount=1,2,3,4;charbbcount=hello;studentcccount;print(a,acount);print(b,bcount);print(c,cc
5、ount);,Case2,请改写输出函数模板,并测试int、char、student数组。,类模板则是对类的抽象,即更高层次上的抽象。类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型通过使用不同的实参生成不同的类。类模板最常见的用法是描述通用数据结构和通用算法STL(StandardTemplateLibrary)std:vector/std:deque/std:stack,类模板,定义格式templateclassvector;templatevoidvector:push_back(Tx)实例化格式vectori(4);vectors(5);vectorstu(20);
6、,语法说明,STL应用示例,voidprint(inti)coutv(6);coutendl向量v中的随机系列:endl;generate(v.begin(),v.end(),rand);for_each(v.begin(),v.end(),print);coutendl用替换奇数后:endl;replace_if(v.begin(),v.end(),odd,0);for_each(v.begin(),v.end(),print);coutendl升序排列后:endl;sort(v.begin(),v.end(),comp);for_each(v.begin(),v.end(),print);
7、,CaseStudy,设计一个程序,每天为NASDAQ证券交易所生成的两个报表来反映当天的交易情况,数据来自包含如下格式的一个文件:MSFT135.87137.988301700buti8.757.54159000要求:程序从文件中读入数据后,输出两个报表,每个报表均列出股票代号、开盘价、收盘价、收益率和成交量;第一个报表按收益率进行降序输出,第二个报表按成交量进行升序输出。收益率=(收盘价开盘价)/开盘价,CaseStudy,CaseStudy,每个报表均列出股票代号、开盘价、收盘价、收益率和成交量,CaseStudy,第一个报表按收益率进行降序输出,第二个报表按成交量进行升序输出。bool
8、Volcomp(conststock,CaseStudy,要求:程序从文件中读入数据voidinput(vector,CaseStudy,要求:升序和降序输出。intmain()vectorstocks;input(stocks);coutendl按成交量升序输出:endl;sort(stocks.begin(),stocks.end(),Volcomp);output(stocks);coutendlendl按收益率降序输出:endl;sort(stocks.begin(),stocks.end(),Gaincomp);output(stocks);,CaseStudy,要求:程序从文件中读
9、入数据voidinput(vector,Conclusion,使用模板机制,模板中的类型参数可用一个实际类型替换,从而达到了类型通用的目的。template关键字class/typename与一起说明这是一个内部类型或用户自己定义的数据类型。函数调用时,编译器将以模板为样板,根据实际参数类型生成一个函数或一个类。函数模板的底层机制是重载。,Conclusion,声明一个类模板的格式是:template类声明使用模板形参表中声明的虚拟类型参数来修饰类的某些成员,使模板类独立于任何具体的数据类型。在模板外对成员函数的声明格式是:template返回类型类名:函数名(形参表)函数体类模板的成员函数都是模板函数。用类模板定义对象的格式是:类名对象名;类名对象名(构造函数实参表);,Quiz,所有的模板定义都是以关键字()开始的,该关键字之后是()括起来的形式参数表。answer:template、从一个函数模板产生的相关函数都同名,因此编译器用()的方法调用相应函数。answer:重载函数模板的类型参数可用于指定()、返回类型、()。answer:形参、局部变量,Exercise,编一个程序,用模板函数对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。有5个字符串,要求将他们按由小到大的顺序排列。,
限制150内