书签 分享 收藏 举报 版权申诉 / 54
上传文档赚钱

类型(C++程序设计课件)第五章-模板.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4979046
  • 上传时间:2023-01-30
  • 格式:PPT
  • 页数:54
  • 大小:876KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《(C++程序设计课件)第五章-模板.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C+ 程序设计 课件 第五 模板
    资源描述:

    1、2023-1-301 1 第五章第五章 模板模板2023-1-302 2int min(int a,int b)return a b?a:b;double min(double a,double b)return a b?a:b;需要为每一种数据类型需要为每一种数据类型定义一个定义一个min函数函数例:求两个数的最小值例:求两个数的最小值参数个数、参数个数、处理流程相处理流程相同同2023-1-303 3?min(?a,?b )return a b?a:b;函数参数类型或返函数参数类型或返回类型能否在函数回类型能否在函数定义时不明确指定,定义时不明确指定,当调用时根据实参当调用时根据实参再确定

    2、?再确定?5.1 5.1 函数模板函数模板2023-1-304 4template Type min(Type a,Type b)return a b?a:b;5.1.1 5.1.1 函数模板定义:将函数参数类型或返回类型参数化函数模板定义:将函数参数类型或返回类型参数化关键字关键字template template 总是放在模总是放在模板的定义与声明的最前面;板的定义与声明的最前面;关键字后面是用逗号分隔的关键字后面是用逗号分隔的模板参数表,它用尖括号模板参数表,它用尖括号 括起来;括起来;每个模板类型参数由关键字每个模板类型参数由关键字classclass或或typenametypenam

    3、e开头,参数开头,参数名是用户自定义的标识符。名是用户自定义的标识符。template Parm min(Parm a,Parm b)return a b?a:b;等同于等同于2023-1-305 5template Type min(Type a,Type b)return a b?a:b;void main()int ri=min(10,20);double rd=min(10.2,20.1);/int min(int,int);/double min(double,double);模板实例化模板实例化2023-1-306 6template T1 sum(T2 a,T3 b)T1 s;s

    4、=a+b;return s;模板类型参数模板类型参数在模板定义中在模板定义中的使用方式和的使用方式和一般类型相同一般类型相同注意:注意:函数参数类型可以被函数参数类型可以被部分参数化,部分参数化,但模板但模板参数表不能为空参数表不能为空。2023-1-307 7例:求一数组中的最小值。例:求一数组中的最小值。int min(const int array 10 )int min_val=array0;for(int i=1;i10;i+)if(arrayimin_val)min_val=arrayi;return min_val;int min(const int array,int size

    5、)int min_val=array0;for(int i=1;isize;i+)if(arrayimin_val)min_val=arrayi;return min_val;template Type min(const Type array,int size)Type min_val=array0;for(int i=1;isize;i+)if(arrayimin_val)min_val=arrayi;return min_val;2023-1-308 8注意:注意:模板参数可以是一个模板参数可以是一个模板类型参数模板类型参数,它代表了一种类型;,它代表了一种类型;也可以是一个也可以是一个

    6、模板非类型参数模板非类型参数,模板非类型参数由一个普通的,模板非类型参数由一个普通的参数声明构成,它代表了一个常量表达式。参数声明构成,它代表了一个常量表达式。int min(const int(&r_array)10)int min_val=r_array0;for(int i=1;i 10;+i)if(r_arrayi min_val)min_val=r_arrayi;return min_val;template Type min(const Type(&r_array)size)Type min_val=r_array0;for(int i=1;i size;+i)if(r_array

    7、i min_val)min_val=r_arrayi;return min_val;2023-1-309 9template Type min(const Type(&r_array)size);用用函数实参的类型函数实参的类型来决定模板实参的类型和值的过程被称为来决定模板实参的类型和值的过程被称为模板实参推演。(模板实参推演。(函数返回类型并不用于模板实参推演函数返回类型并不用于模板实参推演)void main()int ai =12,7,9,39,3;double ad 3=2.3,4.5,1.8;int i=min(ai);double d=min(ad);int a=min(ad);5

    8、.1.2 5.1.2 函数模板实例化函数模板实例化/Type为为int,size为为5/Type为为double,size为为3/Type为为double,size为为32023-1-301010template T1 sum(T2 a,T3 b)T1 s;s=a+b;return s;char a=0;int i=1;char b=sum(a,i);char sum(char,int);?char c=sum (a,i);显式模显式模板实参,板实参,可省略可省略尾部模尾部模板实参板实参char d=sum (a,i);/省略省略T2,T32023-1-3011115.1.3 5.1.3 模板

    9、编译模式模板编译模式我们把函数我们把函数模板定义放在哪里模板定义放在哪里?放在放在头文件头文件中,就好像对内联函数定义的做法一样,中,就好像对内联函数定义的做法一样,在使用函数模板实例的地方包含它们;在使用函数模板实例的地方包含它们;或者我们或者我们只在头文件中给出函数模板声明只在头文件中给出函数模板声明,而把模板,而把模板定义放在定义放在*.c.c中,就好像对非内联函数的做法一样。中,就好像对非内联函数的做法一样。C+C+支持两种模板编译模式:支持两种模板编译模式:包含模式包含模式和和分离模式分离模式。2023-1-301212包含编译模式:将整个模板定义放在头文件中。包含编译模式:将整个模

    10、板定义放在头文件中。/model1.htemplate Type min(Type t1,Type t2)return t1 t2?t1:t2;/在使用模板实例之前包含模板定义在使用模板实例之前包含模板定义#include model1.hint i,j;double dobj=min(i,j);缺点:向用缺点:向用户暴露了模户暴露了模板实现细节板实现细节2023-1-301313分离编译模式:分离编译模式:函数模板的声明被放在头文件中,函数模板的声明被放在头文件中,实现放在实现放在*.c文件中。文件中。/model2.htemplate Type min(Type t1,Type t2);/

    11、model2.Cexport template Type min(Type t1,Type t2)/user.C#include model2.hint i,j;double d=min(i,j);template 之前加上关键字之前加上关键字export 来来声明一个可导出的函数模板,声明一个可导出的函数模板,export 不需要出现在头文件的模板声明中不需要出现在头文件的模板声明中2023-1-301414例:定义一个队列类例:定义一个队列类class Queue public:Queue():front(0),back(0)Queue();int&remove();void add(co

    12、nst int&);bool is_empty()const return front=0;private:QueueItem*front;QueueItem*back;class QueueItem public:QueueItem(const int&);private:int item;QueueItem*next;能否定义通用能否定义通用队列类:不限制队列类:不限制结点保存的结点保存的数据类型?数据类型?2023-1-3015155.2 5.2 类模板类模板template class QueueItem public:QueueItem(const Type&);private:Ty

    13、pe item;QueueItem*next;将类定义中用到的数据类型或常量值参数化将类定义中用到的数据类型或常量值参数化2023-1-301616template class Queue public:Queue():front(0),back(0)Queue();Type&remove();void add(const Type&);bool is_empty()const return front=0;private:QueueItem*front;QueueItem*back;类模板实例类模板实例化化2023-1-301717注意:注意:函数模板实例化时,既可以提供显式模板实参,也可根

    14、据函数函数模板实例化时,既可以提供显式模板实参,也可根据函数实参进行实例化;实参进行实例化;类模板无法根据上下文环境确定模板参数,所以类模板无法根据上下文环境确定模板参数,所以必须提供显式必须提供显式模板实参进行实例化模板实参进行实例化。Queue qi;Queue qs100;Queue *qp=new Queue;实例化后的类模板实例化后的类模板称为模板类,其使称为模板类,其使用方法与一般类相用方法与一般类相同同2023-1-301818类模板成员函数定义:在类模板定义之外类模板成员函数定义:在类模板定义之外template void Queue :add(const Type&val)Q

    15、ueueItem*pt=new QueueItem(val);if(is_empty()front=back=pt;elseback-next=pt;back=pt;当类模板被实例化时,类模板的当类模板被实例化时,类模板的成员函数并不自动被实例化,只成员函数并不自动被实例化,只有当一个成员函数被程序用到函有当一个成员函数被程序用到函数调用或取地址时,它才被实例数调用或取地址时,它才被实例化。化。Queue qi;int a;qi.add(a);2023-1-301919类模板编译模式:类模板编译模式:包含编译模式:类模板定义和成员函数定义等都放在头文件中。包含编译模式:类模板定义和成员函数定义

    16、等都放在头文件中。分离编译模式:类模板定义放在头文件中,成员函数等定义放在分离编译模式:类模板定义放在头文件中,成员函数等定义放在程序文本文件程序文本文件*.cpp.cpp中。中。/-Queue.h-export template class Queue .public:Type&remove();void add(const Type&);.;/-Queue.C-#include Queue.htemplate void Queue:add(const Type&val).template Type&Queue:remove().export关键字用作关键字用作类模板定义中类模板定义中202

    17、3-1-3020205.3 STL5.3 STL(标准模板库:(标准模板库:Standard Template LibraryStandard Template Library)各种各样的各种各样的数据结构:数据结构:链表、堆栈、队列、向量链表、堆栈、队列、向量各种各样的操作:各种各样的操作:遍历、插入、删除、替换遍历、插入、删除、替换面向对象的最大好处:复用、复用、再复用面向对象的最大好处:复用、复用、再复用C+标准库标准库提供许多复用组件提供许多复用组件2023-1-302121STL包括三个主要组件:包括三个主要组件:容器容器(container):模板化的复杂数据类型;):模板化的复杂

    18、数据类型;迭代器迭代器(iterator):用于迭代访问容器中的数据;):用于迭代访问容器中的数据;泛型算法泛型算法(gerneric algorithm):可应用在多种数据):可应用在多种数据 类型(包括容器类型或内置数据类型)上的公共操作。类型(包括容器类型或内置数据类型)上的公共操作。下面以下面以vector容器为例介绍容器、迭代器、泛型算法的使用容器为例介绍容器、迭代器、泛型算法的使用2023-1-3022225.3.1 5.3.1 顺序容器:顺序容器:vectorvector类模板类模板:模板参数表示所存储每个元素的数据类型:模板参数表示所存储每个元素的数据类型快速快速随机访问随机访

    19、问任何元素任何元素在在尾部快速插入、删除尾部快速插入、删除元素,在其它位置插入、删除元素效率很低元素,在其它位置插入、删除元素效率很低动态增长动态增长:存储空间的申请和释放由:存储空间的申请和释放由vectorvector类负责类负责vectorvector类表示具有连续内存单元的数据结构类表示具有连续内存单元的数据结构:顺序容器:由顺序容器:由单一类型元素单一类型元素组成、组成、顺序存放顺序存放的一个集合:的一个集合:vector、list、deque2023-1-302323为了定义为了定义vector对象,必须包含库头文件:对象,必须包含库头文件:#include using names

    20、pace std;容器对象的定义以容器类型的名字开始,后面是所包含的容器对象的定义以容器类型的名字开始,后面是所包含的元素的实际类型,例如:元素的实际类型,例如:vector ivec;vector svec;可以是各种可以是各种内置数据类内置数据类型或用户自型或用户自定义类定义类初始为空:初始为空:长度为长度为0用户自定义类必须支持以下操作:用户自定义类必须支持以下操作:元素类型必须支持等于操作符元素类型必须支持等于操作符元素类型必须支持小于操作符元素类型必须支持小于操作符元素类型必须支持拷贝构造函数元素类型必须支持拷贝构造函数2023-1-302424插入元素最简单的方法是插入元素最简单的

    21、方法是push_back(),将元素插入在容,将元素插入在容器的尾部:器的尾部:vector svec;string text_word;while(cin text_word)svec.push_back(text_word);cout svec.size()endl;长度动态增长长度动态增长vector支持其它一支持其它一些操作:些操作:比较操作比较操作指定位置或范围的指定位置或范围的插入、删除操作插入、删除操作2023-1-302525迭代器:迭代器:指向容器中的元素指向容器中的元素,用于对顺序或关联容器,用于对顺序或关联容器类型中的每个元素类型中的每个元素进行连续访问进行连续访问。5.

    22、3.2 5.3.2 迭代器(迭代器(iteratoriterator)预定义迭代器预定义迭代器+方向方向功能功能iterator向前向前读读/写写const_iterator向前向前读读reverse_iterator向后向后读读/写写const_reverse_iterator向后向后读读vector中定义的迭代器:中定义的迭代器:vector:iteratorvector:iterator2023-1-302626vector vec;vector:iterator iter=vec.begin();vector:iterator iter_end=vec.end();for(;iter!

    23、=iter_end;+iter)cout *iter endl;begin()返回一个返回一个iterator:它指:它指向容器的第一个元素向容器的第一个元素end()返回一个返回一个iterator:它指向:它指向容器的末元素的下一个位置容器的末元素的下一个位置迭代器可进行比较、迭代器可进行比较、自增自增/自减、解寻自减、解寻址等操作址等操作2023-1-302727const_iterator 允许以只读方式访问容器的底层元素例如允许以只读方式访问容器的底层元素例如#include void even_odd(const vector*pvec,vector*pvec_even,vecto

    24、r*pvec_odd)vector:const_iterator c_iter=pvec-begin();vector:const_iterator c_iter_end=pvec-end();for(;c_iter!=c_iter_end;+c_iter)if(*c_iter%2)pvec_odd-push_back(*c_iter);else pvec_even-push_back(*c_iter);2023-1-302828可以用标量算术运算使可以用标量算术运算使iterator 从当前位置偏移到某个位置上从当前位置偏移到某个位置上:vector:iterator iter=vec.be

    25、gin()+vec.size()/2;将将iter 指向指向vec 的中间元素,而的中间元素,而iter+=2;将将iter 向前移动两个元素向前移动两个元素容器对象也可以用容器对象也可以用“由一对由一对iterator 标记的起始元素和末元素下一位置之标记的起始元素和末元素下一位置之间的拷贝间的拷贝”来初始化:来初始化:vector svec;/./用用svec 的全部元素初始化的全部元素初始化svec2vector svec2(svec.begin(),svec.end();/用用svec 的前半部分初始化的前半部分初始化svec3vector:iterator it=svec.begin

    26、()+svec.size()/2;vector svec3(svec.begin(),it);2023-1-302929在迭代器的支持下,在迭代器的支持下,vector等容器类提供检索、插入、等容器类提供检索、插入、删除元素等删除元素等独有操作独有操作。另外还有一些操作,如:查找、排序、合并等操作,这些另外还有一些操作,如:查找、排序、合并等操作,这些操作不是由每个容器类单独提供的,而是作为操作不是由每个容器类单独提供的,而是作为各种容器类、各种容器类、内置数组类型都需要的公共操作内置数组类型都需要的公共操作抽取出来,形成一个抽取出来,形成一个通用通用的算法集合,由库函数提供。的算法集合,由库

    27、函数提供。5.3.3 5.3.3 泛型算法泛型算法泛型算法:泛型算法:STL提供了提供了70种左右的算法种左右的算法2023-1-303030为了使用泛型算法,必须包含库头文件:为了使用泛型算法,必须包含库头文件:#include int ia 6 =0,1,2,3,4,5;vector svec;/vector:iterator viter;int*pia;int i=3;string str=“hello”;pia=find(&ia0,&ia6,i);viter=find(svec.begin(),svec.end(),str);所有泛型算法两个实参所有泛型算法两个实参都是都是一一对对it

    28、erator,它们标记出要操作的容它们标记出要操作的容器或内置数组中的元素器或内置数组中的元素范围范围可应用在各种可应用在各种容器类型或内容器类型或内置数组类型上置数组类型上2023-1-303131#include void main()cout str;深入:输入、输出流深入:输入、输出流2023-1-303232库中提供了以下类的定义:库中提供了以下类的定义:istream类类(输入流)(输入流)ostream类类(输出流)(输出流)iostream类类(派生自(派生自istream和和ostream,输入,输入/输出流)输出流)同时该库定义了如下对象:同时该库定义了如下对象:cin:i

    29、stream类对象,代表标准输入;类对象,代表标准输入;cout:ostream类对象,代表标准输出;类对象,代表标准输出;cerr:ostream类对象,代表标准错误输出。类对象,代表标准错误输出。2023-1-303333输出:输出:重载的左移操作符重载的左移操作符 输出操作符可以接受输出操作符可以接受任何内置数据类型任何内置数据类型的实参;的实参;可以可以连续输出连续输出多个数据。多个数据。能否输出能否输出类对象的信息?类对象的信息?class Person public:private:char*name;int age;ostream&operator (ostream&out);f

    30、riend ostream&operator (ostream&out,Person&one);2023-1-303434ostream&operator (ostream&out,Person&one)out one.name“t”one.age;return out;Person li,wang,zhang;cout li wang 注意:注意:当当右操作数与实际输入数据类型不一致右操作数与实际输入数据类型不一致时,读入失时,读入失败,返回败,返回falsefalse。比输出更容易出错。比输出更容易出错。缺省情况下,以空格、换行、制表符作为分隔符,缺省情况下,以空格、换行、制表符作为分隔符

    31、,并丢弃掉。并丢弃掉。int ivalue;cin ivalue;/当输入小数或字符串时便出错当输入小数或字符串时便出错if(cinivalue)2023-1-303636char ch;while(cin ch);a b cd/忽略空格和换行符忽略空格和换行符/读入四个字符读入四个字符操作符操作符noskipws 使输入操作符不跳过空白字符:使输入操作符不跳过空白字符:char ch;cin noskipws;while(cin ch);cin skipws;/读入七个字符读入七个字符2023-1-3037372023-1-3038382023-1-3039392023-1-304040其它

    32、的输入其它的输入/输出操作:输出操作:istream成员函数:成员函数:get()getline()read()peek()ostream成员函数:成员函数:put()write()2023-1-304141下列三种类类型提供了文件支持下列三种类类型提供了文件支持ifstream 从从istream派生,把一个文件绑到程序上,用来输入派生,把一个文件绑到程序上,用来输入ofstream 从从ostream派生,把一个文件绑到程序上,用来输出派生,把一个文件绑到程序上,用来输出fstream 从从iostream派生,把一个文件绑到程序上用来输入和派生,把一个文件绑到程序上用来输入和输出。输出。

    33、为了使用文件流组件,我们必须包含相关的头文件为了使用文件流组件,我们必须包含相关的头文件#include 由于在由于在fstream 头文件中也包含了头文件中也包含了iostream 头文件,所以我们不需要头文件,所以我们不需要同时包含这两个文件同时包含这两个文件深入:文件操作深入:文件操作2023-1-304242为了打开一个仅被用于输出的文件,我们可以定义一个为了打开一个仅被用于输出的文件,我们可以定义一个ofstream 类对象,例如类对象,例如ofstream outfile(copy.out,ios_base:out);注意:注意:输出模式输出模式ios_base:out 或附加模式

    34、或附加模式ios_base:app,缺省为,缺省为输出模式;输出模式;ofstream从从ostrearn 类派生,所以所有类派生,所以所有ostream 操作都可以操作都可以应用到一个应用到一个ofstream 类对象上类对象上。outfile“hello,world”endl;为了打开一个仅用于输入的文件,我们可以使用为了打开一个仅用于输入的文件,我们可以使用ifstream 类对象,例如:类对象,例如:ifstream infile(“input.txt”);2023-1-304343在定义在定义ifstream 和和ofstream 类对象时,我们也可以不类对象时,我们也可以不指定文件

    35、,以后可以通过成员函数指定文件,以后可以通过成员函数open()显式地把一个显式地把一个文件连接到一个类对象上,例如文件连接到一个类对象上,例如ifstream curFile;curFile.open(“input.txt”);我们可以通过成员函数我们可以通过成员函数close()断开一个文件与程序的连断开一个文件与程序的连接,例如接,例如curFile.close();2023-1-304444fstream类对象可以打开一个被用于输出或者输入的文件,类对象可以打开一个被用于输出或者输入的文件,例如:例如:fstream io(word.out,ios_base:in|ios_base:a

    36、pp);seekg()或或seekp()成员函数分别用于定位读、写位置。成员函数分别用于定位读、写位置。2023-1-304545class iStack class iStack public:public:bool pop(int&top_value);bool pop(int&top_value);bool push(int value);bool push(int value);bool full();bool full();bool empty();bool empty();int value;iStack st;if(!st.push(value)cout“Full”;if(!st

    37、.pop(value)cout“Empty”;if(!st.push(value)错误处理和错误处理和正常操作混正常操作混在一起在一起深入:异常(深入:异常(Exception)Exception)处理处理2023-1-304646异常是程序可以检测到的、运行时刻不正常的情况异常是程序可以检测到的、运行时刻不正常的情况异常处理定义:异常处理定义:定义异常类型定义异常类型抛出异常抛出异常捕获异常捕获异常处理异常处理异常2023-1-304747抛出异常:抛出异常:throw 异常对象;异常对象;异常类型的异常类型的一个实例一个实例class iStack class iStack public:

    38、public:/不再返回一个值不再返回一个值voidvoid pop(int&value);pop(int&value);voidvoid push(int value);push(int value);#include“stackError.h”void iStack:push(int value)if(full()StackError error(1,value);throw error;throw StackError(1,value);执行执行throw语句后,语句后,便抛出一个异常,便抛出一个异常,程序将从抛出异常程序将从抛出异常位置退出位置退出2023-1-304848捕获和处理异

    39、常:捕获和处理异常:try try/包含包含throwthrow语句语句 catch(catch(异常类型异常类型1 1 对象对象)/处理一种异常处理一种异常 catch(catch(异常类型异常类型2 2 对象对象)/处理另一种异常处理另一种异常 throwthrow语句必须在语句必须在trytry块中。块中。如果如果throwthrow抛出的异常对象类抛出的异常对象类型与型与catchcatch后括号内的异常类后括号内的异常类型一致,则程序执行该型一致,则程序执行该catchcatch后的子句后的子句2023-1-304949try int value;iStack st;st.push(

    40、value);st.pop(value);st.push(value);catch(StackError err)int st=err.state();if(st=1)else if(st=2)else正常操作与错正常操作与错误处理操作的误处理操作的分离分离2023-1-305050异常处理步骤:异常处理步骤:trytry块中如果没有异常抛出,则正块中如果没有异常抛出,则正常执行,并忽略后面的常执行,并忽略后面的catchcatch子句。子句。若若trytry块中有异常抛出,则程序从块中有异常抛出,则程序从抛出位置退出;若抛出的异常对象类抛出位置退出;若抛出的异常对象类型与型与trytry块后

    41、的某个块后的某个catchcatch声明类型匹声明类型匹配,则执行该配,则执行该catchcatch子句处理异常;子句处理异常;处理完异常后,程序将从处理完异常后,程序将从catchcatch子句子句列表后的语句继续执行。列表后的语句继续执行。若找不到匹配项,则该函数带着一若找不到匹配项,则该函数带着一个异常退出,继续检查函数调用点是个异常退出,继续检查函数调用点是否有否有try/catchtry/catch子句。子句。bool buidStack()try/push操作操作catch(StackError err)return 1;return 0;void clearStack()/pop

    42、操作操作void main()try buildStack();clearStack();catch(StackError err)2023-1-305151重新抛出异常:在异常处理过程中也可能存在重新抛出异常:在异常处理过程中也可能存在单个单个catch catch 子句不子句不能完全处理异常能完全处理异常的情况,必须由函数调用链中更上级的函数来处的情况,必须由函数调用链中更上级的函数来处理,那么理,那么catchcatch子句子句可以通过重新抛出该异常,可以通过重新抛出该异常,把异常传递给函数把异常传递给函数调用链中更上级的另一个调用链中更上级的另一个catchcatch子句子句。格式:格

    43、式:throw;throw;void buidStack()try/push操作操作catch(StackError err)throw;void main()try buildStack();catch(StackError err)抛出的仍然是抛出的仍然是接收到的接收到的err2023-1-305252捕获所有异常:捕获所有异常:catch()char*str=new char100;delete str;有可能出现有可能出现各种各样的各种各样的异常异常try catch()delete str;throw;2023-1-305353异常类型:用来定义出错信息,可以是用户自定义类型或异常类

    44、型:用来定义出错信息,可以是用户自定义类型或者内置数据类型。者内置数据类型。statckError.hclassStackError public:StackError(int i=0,int v=0):state(i),value(v)int value()return value;int state()return state;private:int state;/0:ok,1:full,2:emptyint value;/试图将试图将value压入堆栈压入堆栈;2023-1-305454作业作业5:写一个程序,要求:已知有字符串写一个程序,要求:已知有字符串string line1=We were her pride of 10 she named us-;string line2=Benjamin,Phoenix,the Prodigalstring line3=and perspicacious pacific Suzanne;string sentence=line1+line2+line3;统计统计sentence中单词的个数,并找出最长的和最短的单词,如果不只有一中单词的个数,并找出最长的和最短的单词,如果不只有一个最长或最短单词,则把它们全部列出来。个最长或最短单词,则把它们全部列出来。请使用请使用容器类容器类实现该程序。实现该程序。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:(C++程序设计课件)第五章-模板.ppt
    链接地址:https://www.163wenku.com/p-4979046.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库