欢迎来到天天文库
浏览记录
ID:49920442
大小:5.90 MB
页数:17页
时间:2020-03-04
《面向对象程序设计 C++ 第二版 课件第9章 模板和异常处理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、学习目标理解函数模板、类模板的概念掌握函数模板和类模板的区别及引用了解异常的基本概念掌握异常处理方法9.1模板概述什么是模板?为什么要使用模板?编写程序时,经常遇到这样的情况:若干程序单元(如函数或者类定义)中除了所处理的数据类型不同,程序代码是一样的。例如交换两个变量的值,考虑到需要处理不同的数据类型,所以一般采用重载技术。9.2函数模板9.2.1函数模板的定义函数模板的定义的一般格式为:template<模板形参表><返回类型><函数名>(<形参表>){<函数体>}9.2函数模板说明(1)template是模板定义的关键字,关键字之后是使用尖括号括起来的<模板形参表>,该表不能为空,它
2、可以包含标准数据类型、类类型。(2)模板形参可以是基本类型,也可以是类类型。<模板形参表>中可以包含一个或多个<模板形参>,如果有多个,则必须用逗号隔开。模板形参可以有三种形式:•class<参数名>•typename<参数名>•<数据类型><参数名>前两种形式的关键字class和typename完全等价,只是C++版本差异,新版本都支持,<参数名>可以是任意的合法标识符。9.2函数模板说明(3)用关键字class或typename定义的参数称为虚拟类型参数,在实际调用函数时会被自动替换为确定的数据类型。用<数据类型>定义的参数称为常规参数,具有确定的数据类型,不需要替换。当函数模板只有一
3、个虚拟类型参数时,参数名通写成T。(4)<形参表>中至少有一个形参的类型必须用<模板形参表>中的参数来定义。9.2函数模板9.2.2函数模板的实例化在定义了一个函数模板后,并不直接执行,只有实例化为模板函数后才能执行。这一过程由编译系统完成。当编译处理函数调用时,如果该函数是一个函数模板,编译系统将根据实参中的类型来确定是否匹配函数模板中对应的参数,然后生成一个重载函数。称该重载函数为模板函数。模板函数的调用格式如下:<模板函数><<模板实参表>>(<函数实参表>)//有常规参数时<模板函数>(<函数实参表>)//无常规参数时9.2函数模板9.2.3函数模板的重载函数可以重载,同样,函数模
4、板也可以重载。函数模板之间、函数模板与普通函数也可以重载。重载函数调用的匹配原则是普通重载函数优先,即匹配规则如下:(1)寻找和使用最符合函数名和参数类型的普通重载函数,若找到则调用它。(2)寻找一个函数模板,将其实例化产生一个匹配的模板函数,若找到则调用它。(3)寻找可以通过类型转化进行参数匹配的重载函数,若找到则调用它。(4)如果按以上步骤均未找到匹配函数,则调用错误。9.3类模板9.3.1类模板的定义类模板的一般定义格式如下:template<模板形式参数表>class类名{类声明体};template<模板形式参数表>//在类模板的外部定义的成员函数1返回类型类名<类型名表>::成
5、员函数1(形式参数表){成员函数体1}template<模板形式参数表>//在类模板的外部定义的成员函数29.3类模板9.3.2类模板的实例化定义一个类模板后,就可以创建类模板的实例,即生成模板类。类模板与模板类的区别是:类模板是模板的定义,不是一个实例类,模板类才是实实在在的类,可以由它定义对象。在使用类模板定义对象时,首先根据给定的模板实在参数实例化成具体的模板类,然后再由模板类建立对象。类模板实例化、建立对象的格式如下:类模板名<模板实在参数表>对象名1,对象名2,…;其中,“<模板实在参数表>”为具体的类型名。9.4异常处理9.4.1异常的概念异常就是程序在执行时发生的错误,以及某
6、种意想不到的状态。如溢出、被零除、数组下标超出界限以及内存不够等。以下这些情况有可能引起异常:◆代码或调用的代码中有错误◆操作系统资源不可用◆公共语言运行库遇到意外情况◆自定义抛出异常◆其它其中某些异常是可以恢复的,而有些则不能。在.NETFramework中,用Exception类表示基类异常。大多数异常对象都是Exception的或某个派生类的实例,但是,任何从Object类派生的对象都可以作为异常引发。9.4异常处理9.4.2异常的处理的实现一般而言,C++的异常处理可以分为两大部分进行:一是异常的检测与发出,二是异常捕捉与处理。异常的检测、抛出和处理可以用3个保留字来实现,即try
7、、throw和catch来管理异常处理。即C++处理异常的机制有3部分组成:(1)检测异常(try语句块),将那些有可能产生错误的语句框定在try块中。(2)捕捉异常(catch语句块),将异常处理的语句放在catch块中,以便异常被传递过来时就处理它。(3)抛出异常(throw语句),检测是否产生异常,若是,则抛出异常。9.4异常处理9.4.3异常处理的执行过程前面演示了如何使用try/catch语句捕获由C#自动产生
此文档下载收益归作者所有