第2章C对C的扩充课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第2章C对C的扩充课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扩充 课件
- 资源描述:
-
1、掌握C+语言在结构化程序结构化程序设计(非面向对象)方面对C语言扩充的性能,为编写面向对象面向对象的C+程序打下基础。2.1 C+的特点的特点2.2 C+语言的文件扩展名语言的文件扩展名2.3 注释符注释符2.4 名字空间名字空间2.5 C+语言的输入输出语言的输入输出2.6 变量的定义变量的定义2.7 强制类型转换强制类型转换2.8 动态内存的分配与释放动态内存的分配与释放2.9 作用域运算符作用域运算符:2.10 引用引用2.11 const修饰符修饰符2.12 字符串字符串2.13 C+语言中函数的新特性语言中函数的新特性习题习题2.1 C+的发明人的发明人 Bjarne Stroust
2、rup(本贾尼斯特劳斯特卢普)博士,C+语言之父,1950年出生于丹麦,1979年在英国剑桥大学获得计算机科学博士学位计算机科学博士学位,AT&T、贝尔实验室和ACM成员。1979年,B.S开始开发一种语言,当时称为“C with Class”,1983年演化为C+。1998年,ANSI/ISO C+标准建立,同年,B.S推出了其经典著作The C+Programming Language的第三版。Stroustrup博士是C+语言的设计者和第一位实现者,该语言业已成为世界上最通用的支持面向对象技术面向对象技术的程序设计语言。2.1 C+开发工具的历史开发工具的历史90年代初的年代初的Turb
3、o C+2.1 C+开发工具的历史开发工具的历史90年代中期的年代中期的Borland C+for dos 2.1 C+开发工具的历史开发工具的历史90年代中期的年代中期的Borland C+Builder for Win 2.1 C+开发工具的历史开发工具的历史21世纪的世纪的visual C+6.0 2.1 C+开发工具的历史开发工具的历史visual studio 2010 2.1 C+的特点的特点 C+语言既保留了语言既保留了C语言的有效性、灵活性、语言的有效性、灵活性、便于移植等全部精华和特点,又添加了便于移植等全部精华和特点,又添加了,具有强大的编程功能,可方便地构,具有强大的编程
4、功能,可方便地构造出模拟现实问题的实体和操作;编写出的程序造出模拟现实问题的实体和操作;编写出的程序具有结构清晰、易于扩充等优良特性,适合于各具有结构清晰、易于扩充等优良特性,适合于各种应用软件、系统软件的程序设计。用种应用软件、系统软件的程序设计。用C+编写编写的程序可读性好,生成的代码质量高,运行效率的程序可读性好,生成的代码质量高,运行效率仅比汇编语言慢仅比汇编语言慢10%20%。为了使编译器能够区别是为了使编译器能够区别是C C语言还是语言还是C+C+语言,语言,C+语言体系规定用语言体系规定用“”(意即意即作作为为C+语言源文件的扩展名以区别于语言源文件的扩展名以区别于C语言用的语言
5、用的“.C”文件扩展名。虽然仅差两个字母,但编译时文件扩展名。虽然仅差两个字母,但编译时的处理却相差甚远。的处理却相差甚远。“cpp”的文件扩展名与操的文件扩展名与操作系统无关。与作系统无关。与C+语言源文件相关的头文件扩语言源文件相关的头文件扩展名一般仍用展名一般仍用“”,但有些操作系统也有规定使,但有些操作系统也有规定使用用“.hpp”充当头文件扩展名的。充当头文件扩展名的。1.1.段注释:段注释:/*/2.2.单行注释:单行注释:/当只做单行注释时便当只做单行注释时便可用可用“/”符号表示从此符号起至符号表示从此符号起至行尾行尾均均为行注释内容。为行注释内容。3.3.程序编译时将忽略所有
6、的注释内容。程序编译时将忽略所有的注释内容。名字空间域是随标准名字空间域是随标准C+而引入的。它相当而引入的。它相当于一个更加灵活的文件域(于一个更加灵活的文件域(全局域全局域),可以用),可以用花括号把文件的一部分括起来,并以关键字花括号把文件的一部分括起来,并以关键字namespacenamespace开头给它起一个名字:开头给它起一个名字:namespace ns1 float a,b,c;fun1()花括号括起来的部分称声明块。声明块中可以包括:花括号括起来的部分称声明块。声明块中可以包括:类、变量(带有初始化)、函数(带有定义)等。在域外类、变量(带有初始化)、函数(带有定义)等。在
7、域外使用域内的成员时,需加上名字空间名作为前缀,后面加使用域内的成员时,需加上名字空间名作为前缀,后面加上域操作符上域操作符“:”。这里添加了名字空间名称的成员名被。这里添加了名字空间名称的成员名被称为限定修饰名。如称为限定修饰名。如:ns1:a,ns1:fun1()等等。等等。最外层的名字空间域称为全局名字空间域(最外层的名字空间域称为全局名字空间域(global global namespace scopenamespace scope),即文件域。),即文件域。名字空间域可分层嵌套,同样有分层屏蔽作用。例如:名字空间域可分层嵌套,同样有分层屏蔽作用。例如:namespace n1 nam
8、espace n2 /名字空间嵌套名字空间嵌套 class matrix/名字空间类成员名字空间类成员matrix 访问访问matrix,可写:,可写:n1:n2:matrix。使用使用using声明声明可只写一次限定修饰名。可只写一次限定修饰名。using声明以关键声明以关键字字using开头,后面是被限定修饰的开头,后面是被限定修饰的(qualified)名字空间名字空间成员名,例如:成员名,例如:using n1:n2:matrix;/名字空间类成员名字空间类成员matrixmatrix的的usingusing声明声明以后在程序中使用以后在程序中使用matrix时,就可以直接使用成员名,
9、而时,就可以直接使用成员名,而不必使用限定修饰名。不必使用限定修饰名。使用使用using指示符指示符可以一次性地使名字空间中所有成员都可以一次性地使名字空间中所有成员都可以直接被使用,比可以直接被使用,比usingusing声明方便。声明方便。usingusing指示符以指示符以关键关键字字using开头,后面是关键字开头,后面是关键字namespace,然后是,然后是名字空间名字空间名名。标准标准C+库库中的所有组件都是在一个被称为中的所有组件都是在一个被称为std的名字空间中声明和定义的。在采用标准的名字空间中声明和定义的。在采用标准C+的平台上使用标准的平台上使用标准C+C+库中的组件,
10、只要写库中的组件,只要写一个一个using指示符指示符:就可以直接使用就可以直接使用中的所有成员。中的所有成员。注意:注意:如果使用了名空间如果使用了名空间std,则在使用,则在使用#include编译预处理命令包含头文件时,必须编译预处理命令包含头文件时,必须去掉头文件的扩展名去掉头文件的扩展名.h,否则会出错。,否则会出错。C+语言另外定义了一套语言另外定义了一套流对象流对象与运算符来替代与运算符来替代C语言中对标准输入输出函数语言中对标准输入输出函数scanf和和printf的引用。的引用。C+语言的保留字为:语言的保留字为:cout“输出内容输出内容”“输入内容输入内容”;/cin为标
11、准输入流对象为标准输入流对象(默认从默认从键盘键盘输入输入)#include 输入重定向输入重定向【例例2.1】C+的输入输出举例。的输入输出举例。#include /使用名空间使用名空间std,则必须去掉,则必须去掉.h扩展名扩展名using namespace std;void main()char name10;int age;coutname;coutage;coutname is nameendl;coutage is ageendl;补充补充(写出程序执行结果,假定输入写出程序执行结果,假定输入1和和2)#include /使用名空间使用名空间std,则必须去掉,则必须去掉.h扩展
12、名扩展名using namespace std;void main()char ch1,ch2;int n1,n2;cinch1ch2;n1=ch1-0;n2=n1*10+(ch2-0);coutn2;补充补充(写出程序执行结果写出程序执行结果)#include /使用名空间使用名空间std,则必须去掉,则必须去掉.h扩展名扩展名#includeusing namespace std;void main()int n,count=0;for(n=1;n=100;+n)coutsetfill(*)setw(10)n;count+;if(count%5=0)coutendl;程序执行结果程序执行结
13、果 在在C C语言中,局部变量说明必须置于可执行代码段之前,语言中,局部变量说明必须置于可执行代码段之前,不允许局部变量声明和可执行代码混合在一起。但不允许局部变量声明和可执行代码混合在一起。但C+C+在变量的定义上作了在变量的定义上作了两种较大的改变两种较大的改变,一是允许变量的,一是允许变量的定义语句可以出现在程序的任何位置定义语句可以出现在程序的任何位置,使得局部变量的使得局部变量的定义点定义点与与使用点使用点不至于离得太远,增强程序的可读性,不至于离得太远,增强程序的可读性,而且也不必在编写某一程序块的开始时就考虑要用到哪而且也不必在编写某一程序块的开始时就考虑要用到哪些变量些变量;二
14、是;二是允许直接使用允许直接使用结构体名结构体名定义变量定义变量,这种扩,这种扩展为程序员在编程中提供了不少方便。类似地在展为程序员在编程中提供了不少方便。类似地在C+C+语语言中联合名、枚举名也可在定义后独立地作为类型名使言中联合名、枚举名也可在定义后独立地作为类型名使用。用。#includeusing namespace std;void main()struct studentint no;float math;int n;cinn;wang.no=n;cinwang.math;coutwang.no wang.mathendl;格式:格式:(数据类型数据类型)(表达式表达式)数据类型数
15、据类型 (表达式表达式)(1)(1)通过强制类型转换,得到一个所需类型的中间值,通过强制类型转换,得到一个所需类型的中间值,该中间值被引用后即自动释放。原来表达式的值类型并该中间值被引用后即自动释放。原来表达式的值类型并未改变。如下列代码段:未改变。如下列代码段:int b;float f;f=float(b);/此时变量此时变量b b仍然为仍然为int类型。类型。(2)(2)强制类型转换符优先级较高,只对紧随其后的表达强制类型转换符优先级较高,只对紧随其后的表达式起作用,而对其他部分不起作用。如表达式式起作用,而对其他部分不起作用。如表达式float(i)*f的含义是先将变量的含义是先将变量
16、i i强制类型转换为强制类型转换为float类型,然后与类型,然后与变量变量f f运算。运算。(3)(3)强制类型转换应当用在不做转换将影响表达式结果强制类型转换应当用在不做转换将影响表达式结果的正确性或精度,或不能完成相应运算的场合。而对于的正确性或精度,或不能完成相应运算的场合。而对于系统可以自动转换类型的场合,则没有必要使用。系统可以自动转换类型的场合,则没有必要使用。栈内存与堆内存栈内存与堆内存l栈空间栈空间是编译编译时分配的固定大小固定大小的内存。用于存放函数调用者的地址、返回值、保存的机器状态(用于返回)、函数参数、局部变量和临时变量等l堆内存堆内存是程序是程序运行运行时分配的时分
17、配的大小可变大小可变的内存,也称的内存,也称为为动态内存动态内存C+提供了两种方法进行内存提供了两种方法进行内存动态分配动态分配和和释放释放lmalloc()和和free()(从从C标准库中继承包含标准库中继承包含malloc.h)lnew和和delete1.new运算符运算符 指针变量指针变量 =new 数据类型数据类型;new从堆内存中为程序从堆内存中为程序分配分配可以保存某种可以保存某种类型数据类型数据的一块的一块内存空间内存空间,并返回指向该内存的,并返回指向该内存的首地址首地址,该地,该地址存放于址存放于指针变量指针变量中。中。堆内存可以按照要求进行分配,程序对内存的需求堆内存可以按
18、照要求进行分配,程序对内存的需求量随时会发生量随时会发生变化变化,有时程序在运行中可能会不再需,有时程序在运行中可能会不再需要由要由new分配的内存空间,而且程序还未运行结束,分配的内存空间,而且程序还未运行结束,这时就需要把先前占用的内存空间这时就需要把先前占用的内存空间释放释放给给堆内存堆内存,以,以后重新分配,供程序的其它部分使用。后重新分配,供程序的其它部分使用。2.delete运算符运算符运算符运算符delete用于释放用于释放new分配的内存空间,它的使用形分配的内存空间,它的使用形式为:式为:delete 指针变量;指针变量;其中的指针变量保存着其中的指针变量保存着new动态分配
19、的内存的首地址。动态分配的内存的首地址。3.注意:注意:(1)用用new获取的内存空间,必须用获取的内存空间,必须用delete进行释放;进行释放;(2)对一个指针只能调用一次对一个指针只能调用一次delete;(3)用用delete运算符作用的对象必须是用运算符作用的对象必须是用new分配的内存空分配的内存空间的间的首地址首地址。#include using namespace std;void main()int*p;p=new int;/分配内存空间分配内存空间*p=5;cout*p;delete p;/释放内存空间释放内存空间【例例2.3】new与与delete应用举例应用举例。(分析
20、运行结果分析运行结果)在用在用new分配内存的同时进行初始分配内存的同时进行初始化。使用形式为:化。使用形式为:指针变量指针变量=new 数据类型数据类型(初始值初始值);例如上例中的:例如上例中的:p=new int;*p=5;也可写成:也可写成:p=new int(5);指针变量指针变量 =new 数据类型数据类型数组大小数组大小;此时指针变量指向第一个数组元素的地址。使此时指针变量指向第一个数组元素的地址。使用用new分配数组时,不能提供初始值。使用分配数组时,不能提供初始值。使用new建立的数组变量也由建立的数组变量也由delete释放。其形式为:释放。其形式为:delete 指针变量
21、;或指针变量;或delete 指针变量;指针变量;同样,也可以用同样,也可以用new来为多维数组分配空间,来为多维数组分配空间,但是除第一维可以为变量外,其它维数都必须但是除第一维可以为变量外,其它维数都必须是是常量常量。4用用new建立数组类型的变量建立数组类型的变量 注意在使用注意在使用delete时,不用考虑数组的维数。时,不用考虑数组的维数。有时,并不能保证一定可以从堆内存中获得所需空间,有时,并不能保证一定可以从堆内存中获得所需空间,当不能成功地分配到所需要的内存时,当不能成功地分配到所需要的内存时,new返回返回0,即,即空空指针指针。因此我们可以通过判断。因此我们可以通过判断ne
22、w的返回值是否为的返回值是否为0,来,来得知系统中是否有足够的空闲内存来供程序使用。例如:得知系统中是否有足够的空闲内存来供程序使用。例如:int*p=new int100;if(p=0)cout cant allocate more memory,terminating.endl;exit(1);其中其中exit函数的作用是终止程序运行。函数的作用是终止程序运行。#include using namespace std;void main()int n;/定义数组元素的个数定义数组元素的个数 int*p;coutn;if(p=new intn)=0)cout cant allocate mo
23、re memory,terminating.endl;exit(1);/分配内存空间分配内存空间 for(int i=0;in;i+)pi=i*2;coutNow output the array:endl;for(i=0;in;i+)coutpi ;coutendl;delete p;/释放内存空间释放内存空间【例例2.4】从堆内存中获取一个整型数组,赋值后并打印出来。从堆内存中获取一个整型数组,赋值后并打印出来。通常情况下,如果全局变量与局部变量同通常情况下,如果全局变量与局部变量同名,那么局部变量在其作用域内具有较高的优名,那么局部变量在其作用域内具有较高的优先权。先权。C语言规定只能在
24、变量的作用域内使用该语言规定只能在变量的作用域内使用该变量,不能使用其他作用域中的变量,可采用变量,不能使用其他作用域中的变量,可采用C+中提供的作用域运算符中提供的作用域运算符:,它能指定所需要,它能指定所需要的作用域。的作用域。注意:注意:不能用不能用:访问访问函数函数中的中的局部变量局部变量。在。在C+语言中作用域运算符语言中作用域运算符:还用来限定还用来限定类类的的成员成员,#include using namespace std;float a=2.4;/全局变量全局变量void main()int a=8;/局部变量局部变量coutaendl;cout:aendl;/:a表示全局作
25、用域中的变量表示全局作用域中的变量a#include void main()int x10,i,j;j=0;/计数器初值赋计数器初值赋0 coutinput 10 numbers:endl;for(i=0;ixi;for(i=0;i0)j+;coutj=j;从键盘上输入从键盘上输入1010个整数,统计其中的正整数的个数个整数,统计其中的正整数的个数 程序运行结果:程序运行结果:(从键盘输入:从键盘输入:-2 3 4 -5 -3 9 -23 0 -1 21)输出:输出:j=4 用冒泡排序法对用冒泡排序法对10个数按从小到大的顺序输出个数按从小到大的顺序输出思想:冒泡法的基本思想是对数组元素做若干
展开阅读全文