C++程序设计第13章 模板教学课件.ppt
《C++程序设计第13章 模板教学课件.ppt》由会员分享,可在线阅读,更多相关《C++程序设计第13章 模板教学课件.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计第13章 模板教学课件C+程序设计标准课件第十四章 模板http:/ 本章内容提要 一、类模板 二、类模板实例化与定做 三、模板的多态 四、高级编程3http:/ 三、模板的多态 二、类模板实例化与定做一、类模板 四、高级编程13.1 类模板4http:/ 13.1.1 什么是类模板 在讲解类模板之前,先回顾一下什么是函数模板:函数模板是一种参数化了的通用算法逻辑,其目的是用相同的逻辑功能处理不同的数据类型,从而避免了相同逻辑的无意义重复,减少了代码量。类模板也是基于这样的考虑而产生的:类模板也对数据的类型进行了参数化处理。在使用过程中提供数据的具体类型,就可以得到一个实在的、可定
2、义不同类型对象的类。例如,可以设计一个表示栈的类模板。template /定义类模板,接受类型参数Tclass Stackpublic:void push(T e);/压入T类型的元素 T pop();/弹出元素private:enumsize=100;/栈的初始容量 T m_arraysize;/保存元素的T类型的数组 int m_count;/元素个数;5http:/ 13.1.1 什么是类模板 这样定义了一个类模板以后,当需要一个处理指定类型元素的Stack类时,只要用该类型实例化Stack模板即可,如下所示。Stack i;/声明一个可以处理int型数据的栈对象 Stack d;/声明
3、一个可以处理double型数据的栈对象Stack s;/声明一个可以处理string型数据的栈对象 与调用函数模板形成对比,使用类模板时,必须为模板形参显式指定实参。编译器使用实参来实例化这个类的特定类型版本。实质上,编译器用用户提供的实际特定类型代替T,重新编写Stack类。在这个例子中,编译器将实例化3个Stack类:第一个用int代替T,第二个用double代替T,第三个用string代替T。使用类模板的主要有以下几个优点。(1)一个类模板可以处理不同类型的数据。(2)提高程序开发效率,不需要为不同的类型编写相同的逻辑。6http:/ 13.1.2 类模板的语法 类模板的定义如下所示。t
4、emplate class 类模板名 类体;值得注意的是,类模板最后的“;”不能丢掉。类模板的模板形参也分为类型形参和非类型形参两种。在类模板成员的定义中,可以在任何可以使用类型名字的地方使用模板参数。从类模板定义的语法中可以看到,除了模板形参表外,类模板的定义看上去与任意其他类相似。类模板可以定义数据成员、成员函数和类型成员,也可以使用访问标号控制对成员的访问,还可以定义构造函数和析构函数等。7http:/ 13.1.2 类模板的语法 例如,可以在类模板的内部和外部定义类模板。其中在类模板内部定义时,其语法与定义普通的成员函数一样。但是在类模板外部定义时,需要声明这个类模板的参数。例如,在类
5、模板Stack外定义pop函数。template class Stackpublic:T pop();/成员函数,弹出元素 .;template /在类模板外部定义类模板的成员函数T stack:pop().8http:/ 13.1.3 模板类和类模板 类模板的重点是模板。表示一种模板,专门用于产生类的模型。类模板通过在类定义上铺设类型参数来表示具有相似操作的系列类。例如:template class Student .;当使用Student模板时,就可以为模板形参T显式指定类型,产生可定义对象的类,如Student、Student、Student 等。模板类的重点是类。一般是指类模板实例化产
6、生的实在的、可定义对象的类。通常通过传递给类模板以类型实参而得到模板类。例如,上述模板类中的Student、Student 等就是类模板。实质上,类模板只是一个模板,而模板类则是模板实例化的结果是真正可以用来声明对象的类。同理,也有函数模板与模板函数之别。函数模板属于模板,是一个函数系列,而模板函数则是普通函数的一种。函数模板实例即为模板函数。9http:/ 13.1.4 模板值参数 模板形参分为类型参数和值参数(即非类型参数),模板形参可以是类型参数或值参数的一种,也可以是既包含类型参数,又包含值参数的一个参数列表。在类模板定义过程中,值参数通常作为常量使用。而类模板值参数的声明形式同函数模
7、板值参数的声明一致。例如:/定义一个表示各种类型数据求和的数组类模板template /定义类模板,接受类型参数T和值参数sizeclass Array /Array为类模板名public:T sum()/成员函数,求数组元素之和 T sum;/用类型参数定义临时变量 for(int i=0;isize;i+)/遍历数组求和 sum+=aryi;return sum;/返回元素的和 private:T ary size;/内置数组,用类型参数和值参数定义;10http:/ 13.1.5、默认模板实参 C+语言规定,在定义类模板时,可以设定模板形参的默认值,即可以像设定函数默认实参(4.3.5)
8、那样给模板形参(包括类型参数和非类型参数)设定默认实参,其语法同设定函数的默认实参相同。例如:template class Array .;在类模板定义中设定了模板形参的默认实参后,当实例化一个类模板Array时,就可以使用设定的默认实参,而不必再显示指定该模板形参的实参。例如:Array ary1;Array ary2;Array ary3;上述3种声明方式都是可行的。11http:/ 13.1.6、到基类的转换 当一个类模板的某个实例有派生类时,该模板可以作为函数模板的函数参数。只是在这种情况下使用该函数模板时,传递的参数有可能是类模板派生类的对象,而不仅仅是其基类的对象。例如,现有如下类
9、模板。Template /定义类模板,模板形参为Tclass Base .;假定该类模板存在如下的派生类模板:Template class Derived:public Base/类模板Derived,派生自Base .;如果存在下面的函数模板:Template /定义函数模板,模板形参为Tvoid fun(Base obj)/模板fun的函数形参为类模板Base某个实例的对象.由于在进行函数模板实参推演时,允许派生类到基类的转换,所以在使用函数模板fun时,传递的函数实参不必一定是Base的某个实例的对象,也可以是Derived的某个实例的对象,如Derived i_obj、Derived
10、d_obj等。12http:/ 三、模板的多态一、类模板 二、类模板实例化与定做 四、高级编程13.2 类模板实例化与定做13http:/ 13.2.1 类模板的实例化 根据类型创建对象的过程称为类型的实例化。根据模板创建类型定义或函数定义的过程称为模板的实例化。类模板的实例化就是用指定的具体模板实参,替换模板形参的过程。类模板实例化后,产生出模板类,或称类模板实例。由于被激活的实例化有滞后的缺点:只实例化类模板的定义部分,而不将其成员函数的定义部分一起实例如,书中【例13-2】中main函数的开头可以通过增加一条显示实例化语句来实现在实例化类模板定义的同时,实例化类模板中的所有成员函数。in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+程序设计第13章 模板教学课件 C+ 程序设计 13 模板 教学 课件
限制150内