C语言基础实用教案

上传人:s9****2 文档编号:570549804 上传时间:2024-08-05 格式:PPT 页数:73 大小:1.39MB
返回 下载 相关 举报
C语言基础实用教案_第1页
第1页 / 共73页
C语言基础实用教案_第2页
第2页 / 共73页
C语言基础实用教案_第3页
第3页 / 共73页
C语言基础实用教案_第4页
第4页 / 共73页
C语言基础实用教案_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《C语言基础实用教案》由会员分享,可在线阅读,更多相关《C语言基础实用教案(73页珍藏版)》请在金锄头文库上搜索。

1、C+语言(yyn)基础C+语言概貌数据类型函数(hnsh)指针数组第1页/共72页第一页,共73页。1.C+程序程序(chngx)概貌概貌第一个C+程序#include /包含ANSI C+库文件using namespace std; /使用预定义的名字空间(kngjin)std void main( void )cout “Hello, world!” endl; /输出字符串2第2页/共72页第二页,共73页。ISO/ANSIC+库文件库文件(wnjin)程序的第一行是#include。#include是一条编译预处理指令,它的作用是在源文件中插入iostream文件所包含的所有源代码。

2、iostream文件是标准C+的一个(y)库文件。C语言的头文件都有后缀.h,C+语言可以直接使用这些带.h后缀的头文件。为避免命名的冲突,ISO/ANSIC+标准将每一个(y)C语言的头文件对应地改造为一个(y)库文件(文件名仅仅是将原文件的.h去掉),并将该文件中定义的标识符定义在标准的名字std中。3第3页/共72页第三页,共73页。名字名字(mngzi)空间空间包含头文件iostream的目的是为了使用标准输出(shch)流cout和endl。通过usingnamespacestd语句来引入名为std的名字空间。解决问题的方案有两个:使用名字限定符std:cout“Hello,worl

3、d!”和“变量名;“”在C语言中是右移运算符,在C+语言中,如果第一个操作数为cin,它就是(jish)输入运算符。输出格式为:变量cout表达式常量(各种类型常量均可)“”在C语言中是左移运算符,在C+语言中,如果第一个操作数为cout,它就是(jish)输出运算符。输入和输出运算符可以连用。第7页/共72页第七页,共73页。注释注释(zhsh)为程序(chngx)加入适当的注释是非常有价值的,因为这些注释可以为我们阅读程序(chngx)提供帮助。C+具有C的多行风格注解。使用“/*”开始,直到“*/”结束,可以注解多行,但不允许嵌套。C+也提供一种新的表示注解的方法,Comment_to_

4、end_of_line的结构,使用“/”开始,直到行尾结束。8第8页/共72页第八页,共73页。2.数据类型数据类型C+的内建(Built-in)类型1.整型C+整数类型包括字符型char、短整型short、整型int和长整型long。下面的这些数的类型都属于(shy)整数类型:-128,-30,0,64,65535,680712可以用到的整数类型有8种:char,short,int,long,unsignedchar,unsignedshort,unsignedint,unsignedlong其中,unsignedint可以简写为unsigned。9第9页/共72页第九页,共73页。数据类型

5、数据类型2.字符型字符型char是一种特别的整数类型。字符型数据在内存中是以ASCII码的形式存储的。由于字符的存储值ASCII码是个整数,因此在某些情况下我们(wmen)会把字符数据当作整型数据来参与运算。C+的转意字符序列。比如,n并不代表字符n,而是表示新行(newline)。这里符号(反斜杆)叫做转意字符,意思是跟在它后面的字符不再是原来的含义,而是有其它的含义。如果当要用到符号本身,需要把它写成。10第10页/共72页第十页,共73页。数据类型数据类型3.布尔型布尔型bool是一种特殊的内建整数类型,因为它采用与整数相同的存储方式。不过,布尔类型的表达范围非常有限,只能取false和

6、true两个值。这是两个C+的关键字,而且是两个字符常量标识符,并不是字符串。应该注意的是,虽然这里把bool类型归为整数类型,但这并不等于我们可以把它当作整数使用。bool类型主要用来表达一种逻辑真或假的状态,它的含义和用途与整数是完全(wnqun)不同的。11第11页/共72页第十一页,共73页。数据类型数据类型浮点类型浮点类型浮点数指的是带有小数浮点数指的是带有小数(xiosh)部分的数,用来表示数学意义上的实数。实数的部分的数,用来表示数学意义上的实数。实数的表示是:表示是:整数部分整数部分.小数小数(xiosh)部分部分其中小数其中小数(xiosh)部分看起来也是个整数。除了小数部分

7、看起来也是个整数。除了小数(xiosh)点,整数部分和点,整数部分和小数小数(xiosh)部分可以缺省,但不能两者都缺。下面是一些浮点数的例子:部分可以缺省,但不能两者都缺。下面是一些浮点数的例子:,6.,.2C+的浮点类型有三种:的浮点类型有三种:float、double、longdouble。12第12页/共72页第十二页,共73页。3.变量变量(binling)和命名常量和命名常量标识符标识符为了使为了使C+程序更加易读易写,我们会用一些有意义的名字来标识程序元素,比如数程序更加易读易写,我们会用一些有意义的名字来标识程序元素,比如数据、函数等等。那些用来标识程序元素的名字就是据、函数等

8、等。那些用来标识程序元素的名字就是( jish)标识符。使用自定义标识符也标识符。使用自定义标识符也是所有高级语言的特征。是所有高级语言的特征。标识符是由字母标识符是由字母A-Z,a-z和数字和数字0-9混合而成的,另外可以加入下划线混合而成的,另外可以加入下划线_。不过,。不过,所有的标识符必须以字母或者是下划线所有的标识符必须以字母或者是下划线_开头。开头。13第13页/共72页第十三页,共73页。3.变量变量(binling)和命名常量和命名常量标标识识符符命命名名一一个个标标识识符符的的时时候候,遵遵循循一一些些常常用用的的约约定定:取取一一个个有有意意义义的的名名字字。如如果果名名字

9、字由由多多个个单单词词组组成成,那那么么每每个个单单词词的的第第一一个个字字母母用用大大写写。(C+是是大大小小写写敏敏感感的的语语言言)使使用用匈匈牙牙利利记记号号。匈匈牙牙利利记记号号是是一一种种前前缀缀(qinzhu),是是在在标标识识符符的的前前面面加加上上一一个个小小写写字字母母以以示示其其数数据据类类型型。变变量量声声明明charcData;boolbFlag;intiPage,nCount;doublefDelta;14第14页/共72页第十四页,共73页。3.变量和命名变量和命名(mngmng)常量常量变变量量声声明明一一旦旦声声明明了了一一个个变变量量,这这个个变变量量在在运

10、运行行时时就就会会在在内内存存中中占占据据一一定定(ydng)大大小小的的空空间间。例例如如声声明明变变量量iPage在在内内存存中中的的映映像像如如下下图图所所示示:15iPage0x0013FF78内存单元的符号名内存单元的32位地址内存单元的大小在32位机上是4字节第15页/共72页第十五页,共73页。3.变量和命名变量和命名(mngmng)常量常量常常量量(NamedConstant)和和const关关键键字字常常量量一一些些常常量量(字字面面常常量量)和和所所属属(sush)类类型型的的例例子子:10(int)077L(long)0xABCDu(unsignedint)9.78f(f

11、loat)7905.30(double)A(char)16第16页/共72页第十六页,共73页。3.变量变量(binling)和命名常量和命名常量命名常量使用字面常量省掉了占用内存单元的开销,但也有一些缺点:在多处使用了相同的字面常量,而后来又要对这个常量进行修改时就会显得非常麻烦;字面常量没有明确的类型信息,它们的类型采用编译器的约定。为了解决上述的问题,可以使用C风格的没有参数的宏定义:PI并不是真正(zhnzhng)的符号常量。仅是一个字符串,没有类型,不占用存储空间,不能取它的地址。17第17页/共72页第十七页,共73页。3.变量变量(binling)和命名常量和命名常量命名常量C+

12、提供灵活的命名常量方式来描述常数:constfloatPI=3.14;PI成为一个真正的符号常量,有类型,需要占用(zhnyn)存储空间(存放在常量数据区)。PI的值不能被修改。18第18页/共72页第十八页,共73页。数据类型汇总数据类型汇总(huzng)19C+的数据类型地址类型简单类型结构类型整数类型布尔型 bool字符型 unsigned char短整型 unsigned short整型 unsigned int长整型 unsigned long浮点类型单精度浮点型 float双精度浮点型 double长双精度浮点型long double枚举类型 enum指针类型 pointer引用类

13、型 reference数组 array结构 struct联合 union类 class第19页/共72页第十九页,共73页。4用户用户(yngh)自定义类型自定义类型-枚举枚举用宏来定义一系列表示状态的常量有明显的缺陷,就是没有类型信息。C+提供了一种更好的解决方案,就是使用(shyng)枚举类型:enumTrafficLightRED,GREEN,AMBER;标识符RED、GREEN、AMBER被称为枚举常量,它们不是字符串,也不是整型常量。另外,枚举常量是有序的。20第20页/共72页第二十页,共73页。4用户用户(yngh)自定义类型自定义类型-数组数组一维数组一维数组的定义如下:TYP

14、Earray整型常量;二维数组在处理像矩阵这样的二维阵列(这正是array这个词汇的原意)时,使用二维数组constintROW=3;constintCOL=5;intarrROWCOL;一维字符(zf)数组一维字符(zf)数组往往被用来表示字符(zf)串。不过,数组最后一个有效字符(zf)的后面必须是个结束标记。这样的字符(zf)串被称为ASCIZ字符(zf)串。charszName=K,e,n,0;21第21页/共72页第二十一页,共73页。4用户自定义类型用户自定义类型(lixng)-结构和联合结构和联合结构struct数组是相同类型数据的集合。当要把不同类型的数据集合在一起时,会用到结

15、构struct。结构的例子structEmployeeintnID;/工号charszName30;/姓名(xngmng)charcGender;/性别shortnDOB;/出生年份intnDeptID;/工作部门号;22第22页/共72页第二十二页,共73页。4用户自定义类型用户自定义类型(lixng)-结构和联合结构和联合联合union联合的定义类似于结构的定义;联合和结构的不同之处在于(ziy),联合变量的每个成员都共享同样的内存单元。一个联合变量的大小实际上是它占据内存最多的那个成员的大小。23第23页/共72页第二十三页,共73页。4用户用户(yngh)自定义类型自定义类型-指针指针

16、指针是另外一个变量的地址,通过这个地址可以间接地访问到那个变量。intnUnit;int*pi=&nUnit;符号*表明了变量pi是一个指针变量;运算符&的功能是取变量nUnit的地址。这样,pi单元的内容(nirng)就是nUnit单元的地址。24第24页/共72页第二十四页,共73页。4用户自定义类型(lixng)-指针由于指针(zhzhn)是地址,因此所有指针(zhzhn)单元的大小都是一样的。但是,这并不意味的两个指针(zhzhn)变量可以互相赋值,因为指针(zhzhn)是有类型之分的。指针(zhzhn)类型可以看作有两部分组成:首先它是个指针(zhzhn)(值为地址);其次,指针(z

17、hzhn)变量指向了一个特定类型的变量。float*pf;第25页/共72页第二十五页,共73页。4用户用户(yngh)自定义类型自定义类型-指针指针指针和常量修饰符constconst也可以与指针一起(yq)使用,它们的组合情况复杂一些,可归结为三种:指向常量的指针常指针指向常量的常指针。26第26页/共72页第二十六页,共73页。4用户自定义类型(lixng)-指针指向常量的指针constTYPE*pc;pc指向的单元(dnyun)不能改变,但pc可以改变常指针TYPE*constcp=;cp不能改变,但它指向的单元(dnyun)可以改变指向常量的常指针constTYPE*constcpc

18、=;cpc指向的单元(dnyun)不能改变,cpc不可以改变第27页/共72页第二十七页,共73页。5用户自定义类型用户自定义类型(lixng)-引用引用引用就是给一个变量(binling)取一个别名。也就是说,引用与它所引用的变量(binling)实际上是同一个单元(共享存储单元)。引用主要有以下三个用途:()独立引用;例如:inti;int&j=i;()作为参数传递;()作为返回类型。后2者有意义。28第28页/共72页第二十八页,共73页。引用(ynyng)(ynyng)作为函数参数C语言采用传值(call by value)方式进行参数传递。当一个函数需要修改对应的实参的值时,参数应明

19、确声明为指针类型。void fun(int num) num=100;void main( ) int annum=10; fun(annum); coutannum;输出10实参与(cny)形参的传递方式为:int num=annum第29页/共72页第二十九页,共73页。引用(ynyng)(ynyng)作为函数参数void fun(int &num)num=100;void main( ) int annum=10; fun(annum); coutannum;输出(shch)100实参与形参的传递方式为:int &num=annumvoid fun(int * p)*p=100;void

20、 main( ) int annum=10; fun(&annum); cout=!=(not_eq)逻逻辑辑运运算算符符:!&|notandor位位运运算算符符:&|移移位位运运算算符符:赋赋值值运运算算符符:=+=-=*=/=%=|=&=条条件件运运算算符符:?:36第36页/共72页第三十六页,共73页。常用常用(chnyn)运算符运算符求字节运算符:sizeof指针运算符:*&成员选择运算符:-.*-*下标运算符:函数(hnsh)运算符:()域选择运算符::逗号运算符:,其它运算符37第37页/共72页第三十七页,共73页。5C+运算符运算符-内存内存(nicn)管理管理动态存储分配和

21、释放存储空间的功能,C语言是利用malloc和free函数完成的。void*malloc(size_tsize);voidfree(void*p);C+提供了新的运算符new和delete来完成动态存储分配和释放存储空间的工作:new的参数是待分配单元的数目,它自动计算要分配类型的大小,而不给出要分配的存储区的大小(字节数);new自动返回正确(zhngqu)的指针类型,不必对返回指针进行类型转换;可以用new将分配的存储空间进行初始化;38第38页/共72页第三十八页,共73页。new运算符new用于内存分配的使用形式为type*p;p=newtype;其中,type是一个数据类型名;p是指

22、向该数据类型的指针;new从堆的一块空闲内存区中分配一块内存,其大小就是type类型的数据长度,该内存地址被存于指针p中。如果分配失败,new返回一个空指针。type可以是任何类型,包括函数指针,但不允许函数类型。当type为数组类型时,new返回的指针指向数组的第一个元素,当用new创建多维数组时,必须(bx)提供所有维的大小。注意:使用new申请的存储空间是没有名字的,只能通过指针间接访问它们。第39页/共72页第三十九页,共73页。delete运算符delete释放new分配的存储空间,将其交还给堆。它的使用形式一般为deletep;其中,p必须是一个指针,保存着new分配的内存的首地址

23、。动态分配管理的方法要求delete的操作数必须是一个new返回的指针,对不是(bshi)由new得到的任何其他地址类型,使用delete将导致严重错误。这种错误是运行时的错误,很难调试,因此使用delete时请务必注意。回收new分配的数组空间,使用delete进行deletep;表明一个由p指向的数组空间被回收了。第40页/共72页第四十页,共73页。 new new和deletedelete典型(dinxng)(dinxng)用法1 动态分配和释放单个数据的存储区语法为: type * p; p=new type; /通过(tnggu)*p方式访问new申请的空间。 delete p;

24、第41页/共72页第四十一页,共73页。 int main( ) int * p; p=new int; if (!p) cout“allocation failuren”;return 1; *p=20; delete p; return 0;第42页/共72页第四十二页,共73页。2 用new运算符初始化单个数据(shj)的存储区 语法为: type * p; p=new type(); delete p; 第43页/共72页第四十三页,共73页。动态分配数组的存储空间(1)一维数组 语法为: type * p; p=new types; /通过pi的方式(fngsh)访问数组元素。 de

25、lete p; 第44页/共72页第四十四页,共73页。(2)n(2)n维数组语法为: type (* p)常量1常量2常量n-1; p=new types常量1常量2常量n-1; /通过pi1i2in的方式访问数组元素。delete p;s指定数组中的第一(dy)维元素个数,可以是常量或表达式。不能省略 。第45页/共72页第四十五页,共73页。C+运算符运算符-类型转换运算符类型转换运算符隐式转换隐式转换发生在下述的情况下:混合运算:级别低的类型(lixng)向级别高的类型(lixng)转换。将表达式的值赋给变量:表达式的值向变量类型(lixng)的值转换。实参向函数形参传值:实参的值向形

26、参的值进行转换。函数返回值:返回的值向函数返回类型(lixng)的值进行转换。显式类型(lixng)转换显式类型(lixng)转换有几种风格:C风格:(TYPE)表达式(TYPE)(表达式)C+风格:TYPE(表达式)46第46页/共72页第四十六页,共73页。C+运算符运算符-类型转换运算符类型转换运算符显式类型转换使用(shyng)类型安全的显式类型转换运算符floatfnum=5.8;constinticnum=10;intinum=static_cast(fnum);intinum2=const_cast(icnum);47第47页/共72页第四十七页,共73页。6.表达式表达式C+的

27、表达式是一种能计算出一个值的语法分量,它的形式化定义如下(rxi):表达式:=变量名|常量名|字面常量表达式:=(表达式)表达式:=表达式运算符表达式48第48页/共72页第四十八页,共73页。6.表达式表达式-简单语句简单语句(yj)和复合语句和复合语句(yj)在任何合法的C+表达式后面加上一个分号“;”就能使其构成一条合法的C+语句。甚至一个单独(dnd)的分号也能成为语句,这叫空语句。任何C+声明都是语句。多条语句可以复合在一起完成一定的功能。这些语句构成了复合语句。复合语句必须放在一对花括号之间。49第49页/共72页第四十九页,共73页。7.C+语句语句(yj)流流程程控控制制(kn

28、gzh)语语句句if-else语语句句if(bool表表达达式式)语语句句1else语语句句2(ex2-11.cpp)50第50页/共72页第五十页,共73页。7.C+语句语句-流程流程(lichng)控制语句控制语句switch-case语句(yj)switch(整型表达式)case常量表达式1:语句(yj)1;break;case常量表达式2:语句(yj)2;break;default:语句(yj)n;(ex2-12.cpp)51第51页/共72页第五十一页,共73页。7.C+语句语句(yj)-流程控制语句流程控制语句(yj)循环(xnhun)语句while(bool表达式)语句do语句w

29、hile(bool表达式);for(表达式1;表达式2;表达式3)语句52第52页/共72页第五十二页,共73页。7.C+语句语句(yj)-流程控制语句流程控制语句(yj)break和continue语句在循环控制语句当中,如果我们根据某个(mu)条件需要提前结束整个循环,我们可以利用break语句。不过,break语句只能终止包含它的那层循环语句。如果这层循环包含在另一个外层循环之内,那么break就鞭长莫及了。忽略此后的包含在循环体中的语句而直接进入下一次的循环可以使用continue语句。53第53页/共72页第五十三页,共73页。7.C+语句语句-流程流程(lichng)控制语句控制语

30、句goto语句(yj)很多的专家都认为应该取消goto语句(yj),不过C+还是保留了它。现在goto语句(yj)的最大作用就是从嵌套很深的循环中直接跳出来。在其它的场合尽量少使用goto语句(yj)。其实goto语句(yj)也可以构成循环,不过在高级语言程序中我们都不这么做,除非有特别的理由。return语句(yj)return语句(yj)会引起函数立刻返回(结束),main函数也不例外。return语句(yj)的格式为:return表达式;54第54页/共72页第五十四页,共73页。7.C+语句语句(yj)-流程控制语句流程控制语句(yj)try-catch语句try-catch语句用于保

31、护容易发生错误(cuw)的语句块,并且能在错误(cuw)发生时捕获错误(cuw),然后对错误(cuw)进行处理。它的语法如下:Try语句*;catch(类型1变量名1)语句;catch(类型2变量名2)语句;catch(类型n变量名3)语句;55第55页/共72页第五十五页,共73页。8.函数函数(hnsh)函函数数原原型型声声明明和和定定义义函函数数原原型型是是一一个个很很重重要要的的概概念念,函函数数原原型型担担负负着着三三个个特特殊殊的的任任务务:确确定定函函数数返返回回值值的的类类型型,使使编编译译程程序序能能产产生生函函数数返返回回数数据据类类型型的的正正确确代代码码。确确定定了了函

32、函数数使使用用的的参参数数的的类类型型、个个数数和和顺顺序序。函函数数名名代代表表该该函函数数的的函函数数体体以以及及函函数数完完成成的的功功能能。函函数数原原型型一一般般的的语语法法(yf)形形式式为为返返回回类类型型函函数数名名(参参数数列列表表)56第56页/共72页第五十六页,共73页。8.函数函数(hnsh)函函数数的的参参数数C+采采用用“传传值值”或或“传传地地址址”的的方方式式来来使使实实际际(shj)参参数数和和形形式式参参数数相相结结合合。传传值值调调用用(Callbyvalue)实实参参和和形形参参是是两两个个不不同同的的单单元元,在在结结合合时时,实实参参的的值值将将会

33、会被被拷拷贝贝到到形形参参中中。2、传传地地址址引引用用做做参参数数。形形参参是是实实参参的的别别名名。也也就就是是说说,形形参参就就是是实实参参本本身身。这这样样一一来来,对对形形参参的的改改变变也也就就直直接接改改变变了了实实参参。57第57页/共72页第五十七页,共73页。8.函数函数(hnsh)-参数参数1.用const修饰参数使用指针(zhzhn)和引用参数,实参存在被更改的潜在“危险”。为了避免这种危险,可以给形参加上const约束,这是形参/实参成为只读参数,从而避免了被更改的问题。2.缺省参数缺省参数是另一种形式的重载(函数调用的重载)voidfun(intnum=0)其中:n

34、um称为缺省参数,0称为缺省值。可以用两种方式调用函数fun:fun(10);/传递显式的值,则num的初始值为10fun();/无对应的实参,则num的初始值为058第58页/共72页第五十八页,共73页。8.函数函数(hnsh)-返回值返回值函数是一个完成一定功能的程序块,在很多时候需要将计算(jsun)的结果传递给调用该函数的程序块。传递结果的方式之一就是让函数返回一个值。实际上是将返回的值放到一个结果寄存器或临时单元中。1.函数返回值函数返回的值类型,intstrlen(constchar*str)char*p=str;While(*p)p+;returnpstr;59第59页/共72

35、页第五十九页,共73页。8.函数函数(hnsh)-返回值返回值2.函数返回指针函数返回指针,实际上也是返回一个值,不过这个值是某个(mu)单元的地址。char*strcat(constchar*str1,constchar*str2)char*str=newcharstrlen(str1)+strlen(str2)+1;char*p=str;while(*p+=*str1+);p-;while(*p+=*str2+);returnstr;第60页/共72页第六十页,共73页。8.函数函数(hnsh)函函数数(hnsh)的的返返回回值值函函数数(hnsh)返返回回引引用用函函数数(hnsh)返返

36、回回引引用用,实实际际上上返返回回的的是是一一个个存存储储单单元元(即即变变量量)。61第61页/共72页第六十一页,共73页。8.函数函数(hnsh)-内联函数内联函数(hnsh)许多C程序员使用带有参数(cnsh)的宏调用来完成简单函数的调用,但宏很受限,每个变元仅能被引用一次,有时会产生不可期望的副作用。例如:#defineabs(v)(v)0?-(v):(v)当调用为abs(+a)时,将不能正确工作!因为在程序中每次遇到宏替换名时,就用所定义的字符串去替换它,那么替换的结果将是(+a)0?-(+a):(+a)得到的是a+2的绝对值,这产生不期望的结果。62第62页/共72页第六十二页,

37、共73页。8.函数函数(hnsh)-内联函数内联函数(hnsh)宏替换(thun)的好处是没有系统的调用开销。函数正相反。为结合两者的优点,C+语言允许定义内联函数。在函数原型前冠以“inline”表示一个内联函数。例如:inlinevoidfunction(inta,intb);编译时,在调用function的地方用函数体替换(thun),能够加快代码执行,减少调用开销。63第63页/共72页第六十三页,共73页。8.函数函数(hnsh)-递归递归函数递归调用是一个函数直接或者间接调用自己。递归是非常有用的一种(yzhn)调用方式,因为它可以减少代码量。不过,递归代码一般不容易理解,并且执行

38、时对资源(主要的栈资源)消耗较大。64第64页/共72页第六十四页,共73页。8.函数函数(hnsh)-重载重载由于所有C+函数都有函数原型,因此C+容易(rngy)表达重载(overload)一个函数名的概念。亦即它能区分多个函数,即使它们具有相同的名字但有不同的参数。C+允许进行函数重载:多个函数具有相同的函数名,但有不同的参数表和各自的函数体。只要编译能区分参数表(参数个数和类型),就可以重载一个函数名。65第65页/共72页第六十五页,共73页。8.函数函数(hnsh)-重载重载doubleabs(doublenum)return(num0)?-num:num);longabs(lon

39、gnum)return(num0)?-num:num);多个同名函数的原型(yunxng)中不允许只有返回类型不相同,而函数名和参数表完全相同的情况。66第66页/共72页第六十六页,共73页。9.异常处理异常处理(chl)机制机制异异常常处处理理的的意意义义异异常常处处理理是是C+语语言言的的一一个个主主要要特特征征,它它提提出出了了出出错错处处理理更更加加完完美美的的方方法法。出出错错处处理理程程序序的的编编写写不不再再繁繁琐琐,也也不不须须将将出出错错处处理理程程序序与与“通通常常”代代码码紧紧密密结结合合。错错误误发发生生是是不不会会被被忽忽略略的的。如如果果被被调调用用函函数数需需发

40、发送送一一条条出出错错信信息息给给调调用用函函数数,它它可可向向调调用用函函数数发发送送描描述述出出错错信信息息的的对对象象。如如果果调调用用函函数数没没有有(miyu)捕捕捉捉和和处处理理该该错错误误信信号号,在在后后续续时时刻刻该该调调用用函函数数将将继继续续发发送送描描述述该该出出错错信信息息的的对对象象,直直到到该该出出错错信信息息被被捕捕捉捉和和处处理理。67第67页/共72页第六十七页,共73页。异常异常(ychng)处理机制处理机制异异常常处处理理的的方方法法抛抛出出(poch)异异常常throw表表达达式式;异异常常捕捕获获try语语句句*;catch(类类型型1变变量量名名1

41、)语语句句;catch(类类型型2变变量量名名2)语语句句;catch(类类型型n变变量量名名3)语语句句;(ex2-26.cpp)68第68页/共72页第六十八页,共73页。异常异常(ychng)捕获捕获try块关键字try引导可能出错的语句块。异常处理(chl)器异常处理(chl)器紧随try块之后,处理(chl)的方法由关键字catch引导。如果一个异常信号被抛出,异常处理(chl)器中第一个参数与异常抛出对象相匹配的函数将捕获该异常信号,然后进入相应的catch子句,执行异常处理(chl)程序。69第69页/共72页第六十九页,共73页。异常异常(ychng)捕获捕获异常类型excep

42、tion:最基本的异常类,是其它所有标准异常类的基类logic_error:逻辑错误异常类,是exception的子类domian_error:域错错误异常类,是logic_error的子类invalid_argument:参数错误异常类,是logic_error的子类length_error:长度错误异常类,是logic_error的子类out_of_range:范围错误异常类,是logic_error的子类bad_cast:转换错误异常类,是logic_error的子类bad_typeid:类型信息错误异常类,是logic_error的子类runtime_error:运行(ynxng)时错

43、误异常类,是exception的子类range_error:范围错误异常类,是runtime_error的子类overflow_error:溢出错误异常类,是runtime_error的子类bad_alloc:内存分配错误异常类,是runtime_error的子类70第70页/共72页第七十页,共73页。异常异常(ychng)捕获捕获异常规格说明异常规格说明再次使用了关键字throw,函数的所有潜在异常类型均随着(suzhe)关键字throw而插入函数说明中。所以函数说明可以带有异常说明如下:voidf()throw(toobig,toosmall,divzero);71第71页/共72页第七十一页,共73页。感谢您的观看(gunkn)!第72页/共72页第七十二页,共73页。内容(nirng)总结C+语言基础。iostream文件是标准C+的一个库文件。其中,unsigned int可以简写为unsigned。pc指向的单元不能改变,但pc可以改变。cp不能改变,但它指向的单元可以改变。cpc指向的单元不能改变,cpc不可以改变。如果(rgu)这层循环包含在另一个外层循环之内,那么break就鞭长莫及了。这样一来,对形参的改变也就直接改变了实参。其中:num称为缺省参数,0称为缺省值。感谢您的观看第七十三页,共73页。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号