2章_从C快速过渡到C++ (2)

上传人:沈*** 文档编号:243930014 上传时间:2024-10-01 格式:PPT 页数:34 大小:735.50KB
返回 下载 相关 举报
2章_从C快速过渡到C++ (2)_第1页
第1页 / 共34页
2章_从C快速过渡到C++ (2)_第2页
第2页 / 共34页
2章_从C快速过渡到C++ (2)_第3页
第3页 / 共34页
点击查看更多>>
资源描述
单击以编辑母版标题样式,单击以编辑母版文本,第二章,从,C,快速过渡到,C+,2.1,数据类型,2.2 C+,的常量和变量,2.3 C+,的指针,2.4,引用变量,(reference),2.5 C+,的运算符,2.6 C+,的函数,小结,2.1,数据类型,一、基本数据类型,表,2-1,C+,的基本数据类型,4,4,4,8,二、复杂数据类型,C+,中采用”,*,”、”,&,”,、”,”,、”()”等运算符派生复杂的数据类型:,1,数组,常用格式为:,数组名,下标,,例如:,char s=”abc”;s0=A;,2,指针,常用格式为:,*,指针名,例如:,int*pi,(*pfun)(char*,int length);,3,枚举类型,:,enum,colorred,yellow,green;,4.,引用,(,reference):,int val=5,5,class,类型(包括,struct,和,union,类型),6,常量,(constants),:,C+,保留,C,的常量,并加以扩展,const,int tabsize=8;,2.2 C+,的常量和变量,一、常量,整型常量、实型常量、字符常量、字符串常量、符号常量,布尔常量,(bool),有两个值:,true,和,false,;,将,C,中,#define,定义的,符号常量扩展,,即指针变量、引用变量、结构变量、数组、,class,类型的对象都可定义为符号常量。,定义方法:使用,类型说明符,const,修饰,一个与常量相关的标识符来替代常量,;,例,1:,用,PI,表示3.1415926,const,float PI=3.1415926;,float,const,PI=3.1415926;,例,2:,const,char*pc=”accd”;pc2=b;,例,3:,const,int Data=1,2,3,4;,const,与,#define,的区别,?,/,错,一、常量(续),符号常量,定义的符号常量,必须初始化,;,由,const,定义,的符号常量可看作是,只读变量,,,值不可以改变,;,例,2-1,改错,#include,using namespace std;,const double pi=3.1416;,const double r;,void main(),double peri,area;,peri=2*pi*r;,pi=3.14;,area=pi*r*r;,coutperi,areaendl;,const double r=3.2;,错误,错误,不能修改,pi,的值,#include,二、变量,变量先定义后使用;,初始值,变量定义,时可赋,初始值,;,同一程序块内,不可以,定义,同名变量,;,未被初始化,的变量值或者是默认值,或者是无效值,,由变量类型决定,;,C+,增加三点:,(,1,)基本数据类型变量初始化操作的函数表示法,数据类型,标识符,1,=,初始值,1,标识符,n,=,初始值,n;,数据类型,标识符,1,(,初始值,1,),标识符,n,(,初始值,n);,声明格式:,例:,int a(8),b;b=a*7;,float c(2.5);,(,2,)可在程序,中,随时定义,变量,只要在被,使用前,定义即可;,(,3,),作用域,运算符,:,例,2-2,作用域运算符,:,例,2-2,:用作用域运算符访问被隐藏的全局变量。,#include,using namespace std;,int x;,void main(),auto int x(1);,:x=6;,cout,(1)x=,x,endl,;,cout,(2)x=,:,x,endl,;,结果:,(1)x=1,(2)x=6,2.3 C+,的指针,C+,的指针分为常量指针和指针变量。,常量指针:变量的地址、数组名、结构数组名、对象数组名、函数名及用*,const,说明的指针名,例:,char*,const,p=“hello”;,指针变量与,C,语言一样必须先赋值才能参加运算和操作,例:,float*px,*py;,*px=12.43;,*py=13.27;,改:,float x,y,*px=,*px=12.43;,*py=13.27;,可以定义,void,类型的指针,2.4,引用变量,(reference),引用是一种特殊类型的变量,不同于普通变量,也不同于指针变量,是标识对象的一种机制;,引用是对象,存储地址的抽象,,用来为存储器提供别名;,引用有类型;,相当于变量的别名;,1,、定义格式,&,();,或,&,=;,2,、初始化与赋值,定义引用时必须初始化;,可以将一个引用,赋给某个变量;,引用可,被赋值,;,2.4,引用(续,1,),例:,int a=3;,int,&m=a,;,int n=m;,int*p=,m=m+5;,3,a,8,p,m,3,n,定义引用并初始化,将引用赋值给变量,a=8,,对引用的操作就是对被引用者的操作,3,、引用的功能,用做函数的参数或函数的返回值;但函数,不能返回对局部对象的引用,;,例:,int&f(int index,int a),int r=aindex;,return r;,错,,r,是局部对象,正确:,int,为什么?,2.4,引用(续,2,),4,、指针与引用的区别,指针通过地址,间接访问,某个变量,引用通过别名,直接访问,某个变量;,引用,必须初始化,,一旦被初始化后不得再作为其他变量的别名;,5,、对引用变量的限制,不能对引用变量取地址,:,&a(,二级引用无意义,),*p(,二级指针有意义,),;,不能建立引用数组,:,int a4;int(,错,),不能对,void,类型进行引用,:void(,错,),不能用类型初始化引用,:int(,错,),无空引用,:int(,无意义,),int*pi=NULL;(,有意义,),2.4,引用(续,3,),例,2.3,:分析下列程序的输出结果。,#include,using namespace std;,void main(),int val(5);,int,&refv,=val;,refv=,refv+5,;,coutvalendl;,int*p=,&refv,val1(,refv,);,cout*ptval1endl;,输出,10,10,10,2.4,引用(续,4,),例,2.4,:分析下列程序的输出结果。,#include,using namespace std;,int&f(int index,int a)/,返回引用,int,&r=aindex,;,return r;,void main(),int a=1,3,5,7,9;,f(2,a)=55;,for(int i=0;i5;i+),coutait;,传址调用,(C+,中数组自动转换为指针,),;引用可作左值;,输出:,1,3,55,7,a0,9,1,3,5,7,a2,r,55,int b=f(3,a);,cout b=bendl;,2.5 C+,的运算符,一、表达式中的类型转换,1.,隐式类型转换,表达式中不同数据类型参加运算时,赋值表达式中向左看齐,调用函数时,return,后表达式向函数返回值类型看齐,2.,强制类型转换,(,显式类型转换,),(,类型名)表达式,基本数据类型名(表达式),double f=6.86;,int h=int(f);,例,2-5,一、表达式中的类型转换,(,续),例,2.5,隐式类型转换例程。,#include,using namespace std;,int,add(,double,x,double,y,),cout,(2)x+y=,x,+,y,endl,;,return,x,+,y,;,void main(,),int a;,double,b(3.56),c(4.6);,a,=b;,cout,(1)a=,a,b=,b,endl,;,cout,(3)add()=,add(b,c),从左到右,2 3,+-&*,!,+-,sizeof,new delete,(类型),从右到左,4 5 6,.*-*,*/%,+-,从左到右,7,8 9,=,=!=,10,&,11,12,|,13 14,&,|,15,?:,从右到左,16,=+=-=*=/=%=&=|=,17,从左到右,三、,new,和,delete,运算符,new,用于动态分配存储空间,delete,配对使用,释放由,new,所开辟的内存空间。,(1),一般格式,new ,(初值表)或,new ,(2),采用动态赋值操作创建新的动态变量或对象,格式:,*,指针变量名,=new,类型;,delete,指针变量名,例,:if(!(p=new int),/,用于执行出错程序,if(p=(int*)malloc(sizeof(int)=NULL),/,对比,C,(3),动态创建一维数组,*,指针变量名,=new,元素个数,;,delete,指向数组的指针名,例,:float*px=new float1;*px=12.6;,delete,px;,2.6 C+,的函数,一、引用的应用,(,主要作为函数的形参和函数的返回值,),1.,函数的传值调用与传址调用,2.,函数的引用调用,二、设置函数参数的默认值(缺省值,default,),三、内联函数(,inline function,),四、函数重载,1.,函数的传值调用和传址调用,#include,using namespace std;,void swap1(int,x,int,y,),int temp;,temp=x;,x=y;,y=temp;,coutx=x,y=yendl;,void main(),int a(5),b(9);,swap1(,a,b,);,couta=a,b=bendl;,例,2.6,:分析程序输出结果,(,传值调用与传址调用,),。,输出:,x=9,y=5,a=5,b=9,#include,using namespace std;,void swap2(int,*x,int,*y,),int temp;,temp=,*x,;,*x,=,*y,;,*y,=temp;,coutx=,*x,y=,*y,endl;,void main(),int a(5),b(9);,swap2(,&a,&b,);,couta=a,b=bendl;,输出:,x=9,y=5,a=9,b=5,2.,函数的引用调用,引用调用的实现机制和特点,用法,:调用函数的,实参,用,变量名,,被调用函数的,形参,用,引用,;,实现机制,:直接通过引用来改变实参的数据值;,特点,:起到传址调用的作用,但比传址调用更方便、更直接;,2.,函数的引用调用,(,续,),#include,using namespace std;,void swap3(int,&,x,int,&,y),int temp;,temp=x;,x=y;,y=temp;,coutx=x,y=yendl;,void main(),int a(5),b(9);,swap3(a,b);,couta=a,b=bendl;,输出:,x=9,y=5,a=9,b=5,例,2.7,:分析下列程序的输出结果,(,引用调用,),。,/(int*x,int*y),/swap3(&a,&b),2.,函数的引用调用,(,续,),三种调用方式比较,注意:,函数参数求值顺序与参数默认值补足顺序不同,参数求值顺序:由编译器决定求值方向;,参数默认值补足顺序:自左向右,二、设置函数参数的默认值缺省值(,default,),C+,中,在函数,声明,或,定义,时可以为一个或多个参数指定,缺省参数值,;,int add(int x,int,y=10,);,进行函数调用时,若,未指定足够的实参,,则编译器将按,从左向右,的顺序用函数声明或定义中的缺省值来,补足,所缺少的实参,;,add(15);,add(15,10);,二、设置函数参数的默认值,(,续,),在一个指定了缺省值的参数的右边,不能出现没有指定缺省值
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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