第2章C++对C的扩充ppt课件

上传人:494895****12427 文档编号:245235706 上传时间:2024-10-08 格式:PPT 页数:41 大小:161.19KB
返回 下载 相关 举报
第2章C++对C的扩充ppt课件_第1页
第1页 / 共41页
第2章C++对C的扩充ppt课件_第2页
第2页 / 共41页
第2章C++对C的扩充ppt课件_第3页
第3页 / 共41页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,2,章,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+,的特点,C+,语言既保留了,C,语言的有效性、灵活性、便于移植等全部精华和特点,又添加了,面向对象编程的支持,。,用,C+,编写的程序可读性好,生成的代码质量高,运行效率仅比汇编语言慢,10%,20%,。,2.2 C+,语言的文件扩展名,为了使编译器能够区别是,C,语言还是,C+,语言,,C+,语言体系规定用“,.,cpp,”,(,意即,C Plus-Plus,),作为,C+,语言源文件的扩展名以区别于,C,语言用的“,.C”,文件扩展名。,与,C+,语言源文件相关的头文件扩展名一般仍用“,.h,”,(有些操作系统也规定使用“,.,hpp,”,)。,2.3,注释符,1.,段注释:,/*/,2.,单行注释:,/,当只做单行注释时便可用“,/”,符号表示从此符号起至行尾均为行注释内容。,程序编译时将忽略所有的注释内容。,2.4,名字空间(名空间,namespace,),用花括号把文件的一部分括起来,并以关键字,namespace,开头给它起一个名字:,namespace ns1,float a,b,c;,fun1(),花括号括起来的部分称声明块。声明块中可以包括:类、变量(带有初始化)、函数(带有定义)等。在域外使用域内的成员时,需加上名字空间名作为前缀,后面加上域操作符“,:”,。如,:,ns1:a,,,ns1:fun1(),。,最外层的名字空间域称为全局名字空间域(,global namespace scope,),,即文件域。,名字空间域可分层嵌套,同样有分层屏蔽作用。如:,namespace n1,namespace n2,/,名字空间嵌套,class matrix/,名字空间类成员,matrix,访问,matrix,,,可写:,n1:n2:matrix,使用,using,声明可只写一次限定修饰名。,using,声明以关键字,using,开头,后面是被限定修饰的名字空间成员名,如:,using n1:n2:matrix;,/,名字空间类成员,matrix,的,using,声明,以后在程序中使用,matrix,时,就可以直接使用,matrix,,而不必使用限定修饰名。,使用,using,指示符可以一次性地使名字空间中所有成员都可以直接被使用,比,using,声明方便。,using,指示符以关键字,using,开头,后面是关键字,namespace,,,然后是名字空间名。如:,using namespace ns1,;,标准,C+,库中的所有组件都是在一个被称为,std,的名字空间中声明和定义的。在采用标准,C+,的平台上使用标准,C+,库中的组件,只要写一个,using,指示符:,using namespace std;,就可以直接使用,标准,C+,库,中的所有成员。,注意:,如果使用了名空间,std,,,则在使用,#include,编译预处理命令包含头文件时,必须去掉头文件的扩展名,.h,,,否则会出错。,#include using namespace std;,和,#include,是一样的,2.5 C+,语言的输入输出,C+,语言另外定义了一套保留字与运算符来替代,C,语言中对标准输入、输出函数的引用。,#include,cout,“,输出内容”,“,输入内容”,;,/,标准输入流对象,(,默认从键盘输入,),【,例,2.1】C+,的输入输出举例。,#include/,使用名空间,std,,,则必须去掉,.h,扩展名,using namespace std;,void main(),char name10;,int,age;,cout,name;,cout,age;,cout,name is name,endl,;,cout,age is age,endl,;,2.6,变量的定义,C+,允许变量的定义语句可以出现在程序的任何位置。,C+,允许直接使用结构体名,(,联合名、枚举名,),定义变量。,【,例,2.2】C+,的变量定义举例。,#include,using namespace std;,void main(),struct,student,int,no;,float math;,;,int,n;,cin,n;,student,wang,;,wang.no,=n;,cin,wang.math,;,cout,wang.no,wang.math,endl,;,2.7,强制类型转换,格式:,(,数据类型,)(,表达式,),或:,数据类型,(,表达式,),int,b;,float f;,f=,float(b,);/,此时变量,b,仍然为,int,类型,float(i,)*f/*,强制类型转换符优先级较高,先将变量,i,强制类型转换为,float,类型,然后与变量,f,运算*,/,2.8,动态内存的分配与释放,1.,new,运算符做分配,指针变量,=new,数据类型,;,2.,delete,运算符做释放,delete,指针变量;,/*,其中的指针变量保存着,new,动态分配的内存的首地址*,/,注意:,(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,应用举例。,在用,new,分配内存的同时进行初始化。使用形式为:,指针变量,=new,数据类型(初始值);,例如上例中的:,p=new,int,;,*p=5;,也可写成:,p=new int(5),;,指针变量,=new,数据类型,数组大小,;,此时指针变量指向第一个数组元素的地址。使用,new,分配数组时,不能提供初始值。使用,new,建立的数组变量也由,delete,释放。其形式为:,delete,指针变量;,或,delete ,指针变量;,同样,也可以用,new,来为多维数组分配空间,但是除第一维可以为变量外,其它维数都必须是常量。,用,new,建立数组类型的变量,注意在使用,delete,时,不用考虑数组的维数。,有时,并不能保证一定可以从堆内存中获得所需空间,当不能成功地分配到所需要的内存时,,new,返回,0,,即空指针。因此我们可以通过判断,new,的返回值是否为,0,,来得知系统中是否有足够的空闲内存来供程序使用。例如:,int,*p=new int100;,if(p=0),cout,cant allocate more memory,terminating.,endl,;,exit(1);,其中,exit,函数的作用是终止程序运行。,#include,void main(),int,n;/,定义数组元素的个数,int,*p;,cout,n;,if(p,=new,intn,)=0)/,分配内存空间,cout,cant allocate more,memory,terminating,.,endl,;,exit(1);,for(,int,i=0;i,n;i,+),pi,=i*2;,cout,Now output the array:,endl,;,for(i=0;i,n;i,+),cout,pi,;,cout,endl,;,delete p;/,释放内存空间,【,例,2.4】,从堆内存中获取一个整型数组,赋值后并打印出来。,补充:复制初始化和直接初始化。,int,n(50);/,直接初始化,int,m=20;/,复制初始化,注意:,初始化不是赋值,2.9,作用域运算符,:,通常情况下,如果全局变量与局部变量同名,那么局部变量在其作用域内具有较高的优先权。,C+,中提供的作用域运算符,:,,它能指定所需要的作用域。,注意:,不能用,:,访问函数中的局部变量。在,C+,语言中作用域运算符,:,还用来限定类的成员。,#include,using namespace std;,float a=2.4;/,全局变量,void main(),int,a=8;/,局部变量,cout,a,endl,;,cout,:a,endl,;/:a,表示全局变量,a,2.10,引用,引用,用于在程序的不同部分,使用两个以上的变量名指向同一地址,(,内存空间,),,使得对其中任一个变量的操作实际上都是对同一地址单元进行的。被声明为引用类型的变量名则是实际变量名的,别名,。,引用运算符为,&,,声明引用的一般形式为:,数据类型,&,引用变量名,=,变量名;,或 数据类型,&,引用变量名,=,变量名;,或 数据类型,&,引用变量名,=,变量名;,对引用进行操作,实际上就是对被引用的变量进行操作,引用不是值,不占存储空间,引用一旦被初始化,就不能再重新赋值,【,例,2.5】,引用举例。,#include,void main(),int,num=50,;,int,&ref=num,;,ref+=10,;,cout,num=num,endl,;,cout,ref=ref,endl,;,num+=40,;,cout,num=num,endl,;,cout,ref=ref,endl,;,11,点说明:,在一行上声明多个引用型变量,(,函数,),名时,要在每个变量,(,函数,),名前都冠以“,&”,符号。,例如,:,int,i=1,j=2;,int,(2),引用不是变量,,所以引用本身不能被修改,(,不能再改变成为另一个变量的引用,),。,(3),一个变量被声明为引用时必须进行初始化,,除非这个引用是用作函数的参数或返回值,为引用提供的初始值应为变量(包括对象)。引用一旦被初始化,就不能再重新赋值。如,:,/*,接上面两行程序*,/,int,/,错,ref=/,错,/,错,ref=j;/,对,(4),由于引用不是变量,所以,不能说明引用的引用,也不能说明数组元素的类型为引用数组,或指向引用的指针,(,引用不占内存空间,),。例如:,int,/,错误,int,/,错误,由于指针也是变量,因此可以说明对指针变量的引用。例如:,int,*a;,int,*,int,b;p=/a,指向变量,b,(5),引用与指针不同,指针的内容或值是某一变量的内存单元地址,而引用则与初始化它的变量具有相同的内存单元地址。,指针是个变量,可以把它再赋值成其它的地址,然而,建立引用时必须进行初始化并且决不会再指向其它不同的变量。,(6),引用运算符和地址运算符不同,。例如:,int,num=50;,int,/,引用,int,*p=/,取地址,(7),可以用一个引用初始化另一个引用,。例如:,int,num=50;,int,int,ref2=100;/num,被修改为,100,(8),常把函数的参数说明成引用以建立函数参数的引用传递方式。,【,例,2.7】,引用作为函数参数实现数值交换,(9),有空指针,,无空引用,(10),引用不能用数据类型来初始化,。如:,int,&ref=,int,;,/error,(11),返回引用的函数调用可作为左值,若一个函数返回了引用,那么该函数的调用也可以被赋值。,返回值不能是函数的局部变量的引用。,引用返回值只用在需对函数的返回值重新赋值的时候。,【,例,2.8】,统计学生中,A,类学生与,B,类学生各为多少个。,A,类学生的标准是平均分
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!