《模板类和异常处理》由会员分享,可在线阅读,更多相关《模板类和异常处理(24页珍藏版)》请在金锄头文库上搜索。
1、2018/10/17,1,数据结构,预备知识 北京邮电大学电信工程学院计算机技术中心,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-2-,预备知识,模板1 函数模板2 类模板 异常处理throwtrycatch,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-3-,模板,什么是模板?模板是C+中的通用程序模块。运行中根据输入的不同的数据类型,可以产生不同的程序模块。 分类 1 函数模板2 类模板,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-4-,模板,函数模板用来实现一些通用的函数。尤其对于一些函数功能相同,但函数使用的数据类型不同的地方。
2、比如:求最大值、各种算数运算等、排序、查找等等。,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-5-,比如,比较运算int Compare(int a, int b);int Compare(float a, float b);int Compare(char a, char b);,template int Compare(T a, T b);,关键字,形式化参数,函数模板,定义template 函数类型 函数名(形参)函数体; 使用和普通的函数使用方法一样。,T1称为形式化参数,函数类型、形参类型都可以使用T作为数据类型,2018/10/17,北京邮电大学电信工程学院计算
3、机技术中心,-7-,函数模板,例如template /求两个数中较大的一个T max(T a, T b)return a = b ? a : b;void main() coutmax(1, 2) endl; /调用方法coutmax(a, b) endl; ,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-8-,思考:实现一个通用查找函数,普通的查找函数int Find(int a, int e, int len) for (int i=0;ilen; i+)if (ai = e)return i;return -1; ,2018/10/17,北京邮电大学电信工程学院计算机技
4、术中心,-9-,思考:实现一个通用查找函数,template int Find(T a, T e, int len) for (int i=0;ilen; i+)if (ai = e)return i;return -1; ,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-10-,类模板,类模板用来实现一些通用的类。尤其是数据结构中使用的各种逻辑结构,比如:集合类、数组类等等。,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-11-,类模板,类定义template class 类名成员变量;成员函数;,成员变量的类型、成员函数的类型等都可以使用T作为数据类型,2
5、018/10/17,北京邮电大学电信工程学院计算机技术中心,-12-,类模板,类外实现成员函数template 函数类型 类名:成员函数名(形参)函数体;,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-13-,类模板,模板类的使用类名 对象名;,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-14-,例子,题目实现一个通用数组类,要求:1、可以容纳任意类型的数据2、数组长度可任意3、实现增加、删除、获取数组长度的操作,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-15-,template class Array public:Array();
6、void Add(T x);T Remove(int i);int Getlength();Array(); private:T *pdata;int n; ;,说明模板类,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-16-,template Array:Array() pdata = NULL;n = 0; template Array:Array() delete pdata; ,前缀模板类,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-17-,template void Array:Add() template T Array:Remove(int
7、i) Array a;,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-18-,异常处理,如何增加程序的鲁棒性?程序在实际运行中,总会有一些因素导致程序不能正常运行。正常运行的一个程序可能发生的错误,称为异常。异常处理提供了一种机制,用来对异常进行监测和控制。,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-19-,异常处理,异常处理机制throw 抛出异常,供try捕捉try 监测/捕捉异常catch 处理try捕捉的异常,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-20-,例子,没有异常处理的系统函数#include using name
8、space std; void main()char *s=“Hello“;char *buf = NULL;strcpy(buf, s);,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-21-,运行结果,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-22-,改进:增加异常处理,/例如:字符串拷贝函数 void Strcpy(char *d, const char *s) if (d=NULL | s!=NULL)throw ”字符串指针未初始化!” /抛出异常,函数运行到此处终止elsewhile (*d+=*s+); ,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-23-,异常处理,void main() char *s=“Hello”;char *buf = NULL;tryStrcpy(buf, s);catch (char *e) /捕捉异常couteendl; ,2018/10/17,北京邮电大学电信工程学院计算机技术中心,-24-,运行结果,