C Cha6.doc


文档分类:IT计算机 | 页数:约18页 举报非法文档有奖
1/18
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/18
文档列表 文档介绍
C++面向对象程序设计教程(二版)讲稿
第6章模板(书P222)
一、模板的慨念
C++的一个重要特性是支持重用的类属机制。类型、变量、函数均可以参数化。
模板是C++支持参数化多态性的工具。所谓参数化多态性,即是将一段程序所处理的对象的类型参数化。这样,这段程序就可以处理某个类型范围之内的各种类型的对象。这些类型呈现某种共同结构。
由于C++程序结构的主要构件是类和函数,所以模板在C++中有函数模板和类模板。它们分别允许用户构造模板函数和模板类。函数模板具体使用时要以具体类型实例化函数。实例化即用具体类型替代它,实例化后称为模板函数。同理,类模板经过实例化后称为模板类。
模板
(函数模板和类模板)

实例化实例化
模板类
模板函数
实例化
对象
C++ 6章_P1
二、函数模板与模板函数
1、引入
考察下面求绝对值重载函数声明:
int abs( int x ) //适用于整型
{
return ( x < 0 ) ? –x : x ;
}

double abs( double x ) //适用于双精度型
{
return ( x < 0 ) ? –x : x ;
}
函数abs( )被重载用于求整型(int)和双精度(double)
浮点数求绝对值。这些函数的参数个数,函数执行功能相同,即实现代码也相同。由于参数类型不同要重写,浪费许多重复劳动。如果将int和double类型参数化,就可以得到通用的求绝对值代码段:
Template < class T >
T abs( T x )
{
return ( x < 0 ) ? –x : x ;
}
C++ 6章_P2
这样当需要求某整数或双精度数绝对值时,只需将T用int或double替换即可。还可以计算其它类型的绝对值。
这种类型参数化避免了程序员大量的重复劳动,增加程序的灵活性。
2、函数模板定义的一般格式:
Template < class 类型参数>
返回值类型函数名( 模板形参表)
{
函数体
}
其中,Template是一个声明模板的关键字,表示声明一个模板。例如,书P223求最大值函数max()定义成函数模板:
Template < class T >
T max( T x, T y )
{
return ( x > y ? x : y );
}
也可写成:
Template < typename T >
T max( T x, T y )
{
return ( x > y ? x : y );
}
C++ 6章_P3
其中,T为类型参数,它既可取系统预定义的数据类型,又可以是用户自定义的类型。而T前加关键字class
(或 typename)标志T是类型参数类型。
类型参数T必须实例化,即用实际的数据类型替代它。
(书P224)
#include <> //输入输出流头文件
#include <> //字符串头文件
template < class AT > //类型参数 AT
AT max( AT x , AT y )
{ return ( x > y ) ? x : y ; }
main() //主函数
{
int i1 = 10 , i2 = 56; //定义三个整型变量
float f1 = , f2 = ;
double d1 = , d2 = ;
char c1 = 'k' , c2 = 'n' ;
cout << "the max of i1 , i2 is: " << max( i1 , i2 ) << endl ;
//用 int 实例化类型参数 AT
cout << "the max of f1 , f2 is: " << max( f1 , f2 ) << endl ;
//用 float 实例化类型参数 AT
cout << "the max of d1 , d2 is: " << max( d1 , d2 ) << endl ;
//用 double 实例化类型参数 AT
cout << "the max of c1 , c2 is: " << max( c1 , c2 ) << endl ;
//用 char 实例化类型参数 AT
return 0 ;
}
例6_1_1
C++ 6章_P4
程序的运行结果为:
the max of

C Cha6 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数18
  • 收藏数0 收藏
  • 顶次数0
  • 上传人bjy0415
  • 文件大小96 KB
  • 时间2018-06-20