南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 7-模板

模板第7章陈哲教授南京航空航天大学计算机科学与技术学院
1 第7章 模板 陈哲 教授 南京航空航天大学 计算机科学与技术学院

7.1函数模板模板的本质:带有部分“空白”的代码块(函数类),编译器自动“填空”后形成完整的代码块函数模板并不是真正意义上的函数,编译器遇到函数调用时,将根据实参类型和函数模板一起产生函数代码。定义形式:template返回值类型函数名(形式参数表)Y函数体
2 7.1 函数模板 • 模板的本质:带有部分“空白”的代码块(函数、 类),编译器自动“填空”后形成完整的代码块。 • 函数模板并不是真正意义上的函数,编译器遇到 函数调用时,将根据实参类型和函数模板一起产 生函数代码。定义形式: template 返回值类型 函数名 ( 形式参数表 ) { // 函数体 }

从函数重载到函数模板7.1.1,函数重载是函数名相同,参数一定不完全相同,采用函数重载,要对每个函数分别写出相应的代码,例如:
3 7.1.1 从函数重载到函数模板 • 函数重载是函数名相同,参数一定不完全相同,采 用函数重载,要对每个函数分别写出相应的代码。 例如:

int square(int number)return number * number ;float square(float number)Yreturn number * number ;采用函数模板实现square:template T square(T number)Yreturn number * number ;
int square ( int number ) { return number * number ; } float square ( float number ) { return number * number ; } 采用函数模板实现square: template T square ( T number ) { return number * number ; }

【例7.1】函数模板应用举例。template T square(Tnumber)return number * number ;int main ()int userlnt:float userFloat ;cin>> userlnt >> userFloat cout<<"它们的平方分别是:cout<<square(userlnt)<< square(userFloat);return 0;7-1.cpp
【例7.1】函数模板应用举例。 template T square ( T number ) { return number * number ; } int main ( ) { int userInt ; float userFloat ; cin >> userInt >> userFloat ; cout << "它们的平方分别是:" ; cout << square ( userInt ) << square ( userFloat ); return 0; } 7-1.cpp

定义函数模板的方法7.1.2(1)定义一个普通的函数void swap(int &varl,int &var2)int temp;varl=var2;temp=varl;var2=temp;(2)在函数开头加上template,将函数形参的类型和局部变量temp的类型int采用T替换
6 7.1.2 定义函数模板的方法 (1) 定义一个普通的函数 void swap ( int &var1 , int &var2 ) { int temp ; temp = var1 ; var1 = var2 ; var2 = temp ; } (2) 在函数开头加上template ,将函数形参 的类型和局部变量temp的类型int采用T替换

在函数模板中使用多种类型7.1.3函数模板中可以使用多种通用类型,每个类型必须具有自己的参数:T2>template < class T1,class&var2)void swap(T1 &varl,T2T1 temp ;temp = varl :var1 =(T1)var2 ;var2 =(T2)temp ;
7 7.1.3 在函数模板中使用多种类型 • 函数模板中可以使用多种通用类型,每个类型必 须具有自己的参数: template void swap ( T1 &var1 , T2 &var2 ) { T1 temp ; temp = var1 ; var1 = ( T1 ) var2 ; var2 = ( T2 ) temp ; }

函数模板重载7.1.4template sum(T valueOne,T valueTwo)return valueOne+valueTwo;形式之一templateT sum(T valueOne,T valueTwo,T valueThree)return valueOne+valueTwo + valueThree;调用形式:sum(numl,num2)sum(numl,num2,num3)
8 7.1.4 函数模板重载 template T sum ( T valueOne , T valueTwo ) { return valueOne + valueTwo ; } template T sum ( T valueOne , T valueTwo , T valueThree ) { return valueOne + valueTwo + valueThree ; } 调用形式:sum ( num1 , num2 ); sum ( num1 , num2 , num3); 形 式 之 一

函数模板重载7.1.4float sum(float valueOne,float valueTwo)Yreturn valueOne+valueTwo;形式之二template T sum(T valueOne,T valueTwo,T valueThree)return valueOne +valueTwo +valueThree;
9 7.1.4 函数模板重载 float sum ( float valueOne , float valueTwo ) { return valueOne + valueTwo ; } template T sum ( T valueOne , T valueTwo , T valueThree ) { return valueOne + valueTwo + valueThree ; } 形 式 之 二

类模板7.2·类模板使程序员可以创建一般形式的类,而不必编写处理不同数据类型的类,类模板的定义和实现必须在同一个文件中通常是头文件。编译器看到模板实现时才展开模板。·例7-4:带有下标越界检测功能的数组模板
7.2 类模板 • 类模板使程序员可以创建一般形式的类,而 不必编写处理不同数据类型的类。 • 类模板的定义和实现必须在同一个文件中, 通常是头文件。编译器看到模板实现时才展 开模板。 • 例7-4:带有下标越界检测功能的数组模板
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 6-异常处理.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 5-继承多态和虚函数.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 4-类的高级部分.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 3-类的基础部分.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 2-文件操作.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 1-C++程序设计基础.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)09 编译预处理和多文件项目.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)08 文件.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)07 记录类型.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)06 数组.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)05 函数.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)04 控制流.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)03 运算符和表达式.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)02 常量和变量.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)01 计算机和程序.pptx
- 《程序设计》课程教学资源(实验指导)C++语言习题集(南京航空航天大学:陈哲).pdf
- 《程序设计》课程教学资源(书籍文献)Google开源项目风格指南(中文版).pdf
- 长春大学:旅游学院:《Visual FoxPro程序设计》课程教学资源(授课教案,共七章).pdf
- 《计算机导论》课程教学资源(授课教案,教材讲义,共六章).pdf
- 江苏大学:RISC-V CPU设计实验(讲义).pdf
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 8-标准模板库STL.ppt
- 揭阳职业技术学院:《Linux操作系统》课程教学资源(实验教案,共十八个).pdf
- 揭阳职业技术学院:《计算机应用基础》课程授课教案.pdf
- 揭阳职业技术学院:《物联网》课程授课教案.pdf
- 揭阳职业技术学院:《程序设计基础》课程授课教案.pdf
- 揭阳职业技术学院:《办公自动化》课程授课教案.pdf
- 揭阳职业技术学院:《图像处理》课程授课教案.pdf
- 揭阳职业技术学院:《计算机应用基础》课程授课教案.pdf
- 揭阳职业技术学院:《Photoshop制图》课程授课教案.pdf
- 清华大学:《计算机图形学基础》课程教学大纲 Fundamental of Computer graphics(负责人:胡事民).pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)图形学简介.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)视图模型变换.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)双向反射分布函数.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)光线跟踪,递归算法,光线求交.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)参数曲线曲面、Bezier曲线、Bezier曲面.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)网格模型、网格细分和简化.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)网格参数化模型切割的骨架算法.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)B样条曲线曲面.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)光线跟踪加速方法.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)纹理映射.pdf
