模板第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 <class T>T square(T number)Yreturn number * number ;
int square ( int number ) { return number * number ; } float square ( float number ) { return number * number ; } 采用函数模板实现square: template < class T > T square ( T number ) { return number * number ; }
【例7.1】函数模板应用举例。template <class T>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 < class T > 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