VC++程序设计教程(第二版)第六章PPT学习教案_第1页
VC++程序设计教程(第二版)第六章PPT学习教案_第2页
VC++程序设计教程(第二版)第六章PPT学习教案_第3页
VC++程序设计教程(第二版)第六章PPT学习教案_第4页
VC++程序设计教程(第二版)第六章PPT学习教案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1 VC+程序设计教程程序设计教程(第二版第二版)第六章第六章 模板的概念模板的概念 函数模板和模板函数函数模板和模板函数 类模板和模板类类模板和模板类 第1页/共20页 int abs(int x) cout = 0 ? x : -x); double abs(double x) cout = 0.0 ? x : -x); 这些函数只有参数类型不同,功能完全一样。这些函数只有参数类型不同,功能完全一样。 对于这样的函数,我们可以使用函数模板来完成。对于这样的函数,我们可以使用函数模板来完成。 第2页/共20页 模板是对具有相同特性的函数或类的再抽象。模板是对具有相同特性的函数或类的再抽

2、象。 它是一种参数化多态性的工具,可以为逻辑它是一种参数化多态性的工具,可以为逻辑 功能相同而类型不同的程序提供一种代码共享功能相同而类型不同的程序提供一种代码共享 的机制。的机制。 一个模板并非一个实实在在的类或函数,仅仅一个模板并非一个实实在在的类或函数,仅仅 是一个类或函数的描述,是参数化的函数和类是一个类或函数的描述,是参数化的函数和类 。 模板分为模板分为函数模板和类模板函数模板和类模板,通过参数实例化,通过参数实例化 可以再构造出具体的函数或类,称为模板函数可以再构造出具体的函数或类,称为模板函数 和模板类。和模板类。 第3页/共20页 可以把逻辑功能相同而函数参数和返回值类型不同

3、的可以把逻辑功能相同而函数参数和返回值类型不同的 多个重载函数用一个函数来描述。参数化的函数称为多个重载函数用一个函数来描述。参数化的函数称为 函数模板,代表的是一个函数家族。函数模板,代表的是一个函数家族。 templatetemplate () 第4页/共20页 中包含一个或多个用逗号分开的模中包含一个或多个用逗号分开的模 板参数项,每一项由保留字板参数项,每一项由保留字class或或typename开开 始,后跟一个用户命名的标识符,此标识符为模始,后跟一个用户命名的标识符,此标识符为模 板参数,表示一种数据类型,该数据类型在进行板参数,表示一种数据类型,该数据类型在进行 函数调用时决定

4、。函数调用时决定。 第5页/共20页 例:定义一个求绝对值函数的模板例:定义一个求绝对值函数的模板 #include template T abs(T x) return x0? x:x; void main() int n=-5; double d=-5.5; coutabs(n)endl; coutabs(d)endl; 第6页/共20页 /例例 示例函数重载。示例函数重载。 #include int max(int x,int y) /形参为整型形参为整型 return xy?x:y; double max(double x,double y) /形参为双精度型形参为双精度型 retur

5、n xy?x:y; float max(float x,float y) /形参为浮点型形参为浮点型 return xy?x:y; void main() int x1=4,y1=5; double x2=5.5,y2=6.5; float x3=6.0,y3=7.0; coutint Max=max(x1,y1)endl; coutdouble Max=max(x2,y2)endl; coutfloat Max=max(x3,y3)endl; 第7页/共20页 例例6-1 示例函数模板的定义。完成上例重载函数的功能。示例函数模板的定义。完成上例重载函数的功能。 /example61.cpp

6、#include template /模板声明,模板声明,T为模板参数为模板参数 T max(T x,T y) /定义函数模板定义函数模板 return (xy)?x:y; void main() int x1=2,y1=3; float x2=2.5,y2=4.5; double x3=5.54,y3=3.56; coutThe max of x1,y1 is:max(x1,y1)endl; /T为为int coutThe max of x2,y2 is:max(x2,y2)endl; /T为为float coutThe max of x3,y3 is:max(x3,y3)endl; /T为

7、为double 第8页/共20页 第9页/共20页 使用类模板可以为类定义一种模式,使得类中的某些数据成员,某些成员函数的参数,某些成员函数的返回值能取任意类型使用类模板可以为类定义一种模式,使得类中的某些数据成员,某些成员函数的参数,某些成员函数的返回值能取任意类型 第10页/共20页 template template : ( ) 即是类模板中定义的名称;即是类模板中定义的名称; 即是类模板定义中的类型形式参数表中参数名即是类模板定义中的类型形式参数表中参数名 第11页/共20页 例例6-2 示例类模板的定义。已知定义两个类示例类模板的定义。已知定义两个类A和和B, 另用类模板实现。另用类

8、模板实现。 class A public: A(int y):x(y) int fn()return x*x*x; private: int x; ; class B public: B(double y):x(y) double fn()return x*x*x; private: double x; ; 第12页/共20页 /用类模板实现用类模板实现 template class A public: A(T y):x(y) /T的具体类型在使用类模板时指定的具体类型在使用类模板时指定 T fn()return x*x*x; private: T x; ; 第13页/共20页 第14页/共20页 例例6-3示例模板类。示例模板类。 #include template /用用typename与与class等价等价 class A T x; /类模板定义类模板定义 public: A(T xx):x(xx) T fn()return x*x*x; ; void main() /编译时生成一个把编译时生成一个把T转换成转换成int的模板类,并创建对象的模板类,并创建对象a1 A a1(5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论