2章从C快速过渡到C++.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二章从C快速过渡到C++§2.1数据类型§2.2C++的常量和变量§2.3C++的指针§2.4引用变量(reference)§2.5C++的运算符§2.6C++的函数小结§2.1数据类型一、基本数据类型表2-1C++的基本数据类型类型名字宽(字节)范围boolfalse,truechar1-128~127signedchar1-128~127unsignedchar10~255short[int]2-32768~32767signedshort[int]2-32768~32767unsignedshort[int]20~65535int4-2147483648~2147483647signed[int]4-2147483648~2147483647unsigned[int]40~4294967295long[int]4-2147483648~2147483647signedlong[int]4-2147483648~2147483647unsignedlong[int]40~4294967295float43.4E10-38~3.4E1038double81.7E10-308~1.7E10308longdouble103.4E10-4932~3.4E1049328二、复杂数据类型C++中采用”*”、”&”、”[]”、”()”等运算符派生复杂的数据类型:1.数组常用格式为:数组名[下标],例如:chars[]=”abc”;s[0]=’A’;2.指针常用格式为:*指针名例如:int*pi;int(*pfun)(char*);3.枚举类型:enumcolor{red,yellow,green};4.引用(reference):&val5.class类型(包括struct和union类型)6.常量(constants):C++保留C语言的常量,并加以扩展constinttabsize=8;§2.2C++的常量和变量一、常量•整型常量、实型常量、字符常量、字符串常量、符号常量•布尔常量(bool)–有两个值:true和false;•将符号常量扩展,即任何类型的对象(指针变量、引用变量、结构变量、数组、class类型的对象)都可定义为符号常量。用来表示C++中的常量,即用一个与常量相关的标识符来替代常量;•优点:增加可读性,增强可维护性;•例如:PI表示3.1415926•定义方法:使用类型说明符const;•例如:constintsize=80;一、常量(续)——符号常量•定义的符号常量必须初始化;•一个符号常量可看作是一个只读变量,由const定义的常量的值不可以改变;例2-1改错Line1:#includeiostream.hLine2:constdoublepi=3.1416;Line3:constdoubler;Line4:voidmain()Line5:{Line6:doubleperi,area;Line7:peri=2*pi*r;Line8:pi=3.14;Line9:area=pi*r*r;Line10:coutperi,areaendl;Line11:}constdoubler=3.2;错误错误,不能修改pi的值一、常量(续)——可以定义为常量的变量1.基本数据类型的变量constfloatpi=3.14159262.数组其格式为:类型const数组名[元素个数]={初值表};或者说const类型数组名[元素个数]={初值表};例如:constintData[]={1,2,3,4};3.结构变量structComplex{doublereal;doubleimag;};constComplexx={1.0,1.0};x.real=2.0;//出错,不能修改常量值x.imag=3.0;//出错,不能修改常量值4.指针本身和指针所指的目标变量(1)若将指针所指的目标变量定义为常量,则将const直接加到指针说明语句之前,格式为:const类型*指针名=地址表达式;例如:inta=1,b=2;constint*pa=&a;pa=&b;//正确*pa=3;//错误(2)指针本身可以用运算符“*”加const定义为常量,即用“*const”把指针本身为常量,称为常量指针,即指针所具有的地址值是不可改变的,而指针所指对象的值是可以改变的。必须在定义常量指针的同时给它定向,其格式为:类型*const指针名=地址表达式;例如:inta=1,b=2;int*constpa=&a;//常量指针可以写作:*pa=3;但不能写作:pa=&b;//出错,不能给常量指针重新定向(3)指针和所指对象可同时定义为常量,成为指向常量的常量指针,这时两者都不能再改变。其格式为:const类型*const指针名=地址表达式;(4)★★常量指针是C++中一个非常有用的概念,除了用“*const”定义的常量指针外,还有变量的地址、数组名、结构数组名、对象数组名、函数名等也是常量指针。因此,const与指针配合使用,可以定义指向常量的指针、常量指针和指向常量的常量指针,列于表2.1中。名称定义格式举例指向常量的指针const类型*指针名;类型const*指针名;constint*pc;intconst*pc;常量指针类型*const指针名;int*constcp;指向常量的常量指针const类型*const指针名;constint*constcpc;二、变量变量是在程序执行时其值可以改变的量。在C语言中任何一个变量在使用前必须用说明语句定义,在ANSIC++标准中仍然保留。格式为:存储类类型变量名[=初值];其中[]所包围的部分可缺省。变量具有4个基本要素:作用域、名字、类型和值。变量先定义后使用;初始值变量定义时可赋初始值;同一程序块内不可以定义同名变量;未被初始化的变量的值或者是默认值,或者是无效值,由变量类型决定;C++增加三点:(1)基本数据类型变量初始化操作的函数表示法存储类数据类型标识符1=初始值1,…,标识符n=初始值n;存储类数据类型标识符1(初始值1),…,标识符n(初始值n);声明格式:例:inta(8),b;b=a*7;floatc(2.5);(2)可在程序中随时定义变量,只要在被使用前定义即可;例如:for(inti=0;i6;i++){……}或for(inti(0);i6;i++){……}注意循环变量i的作用不是在for语句循环体内,而是在循环体之外,它等效于:inti;for(i=0;i6;i++){……}(3)作用域运算符::例2-2:用作用域运算符访问被隐藏的全局变量。#includeiostream.hintx;voidmain(){autointx(1);cout(1)x=xendl;::x=6;cout(2)x=::xendl;}结果:(1)x=1(2)x=6§2.3C++的指针C++的指针分为常量指针和指针变量。常量指针:变量的地址、数组名、结构数组名、对象数组名、函数名及用*const说明的指针名例:constchar*constp=“hello”;指针变量与C语言一样必须先赋值才能参加运算和操作可以定义void类型的指针例改错:float*px,*py;*px=12.43;*py=13.27;改:floatx,y,*px=&x,*py=&y;*px=12.43;*py=13.27;§2.4引用变量(reference)引用是一种特殊类型的变量,不同于普通变量,也不同于指针变量,是标识对象的一种机制;对对象存储地址的抽象,但引用不是值;引用有类型;相当于变量的别名;1、定义格式类型&引用名(变量名);或类型&引用名=变量名;2、初始化与赋值定义引用时必须初始化;可以将一个引用赋给某个变量;引用可被赋值;§2.4引用(续1)示例:inta=3;int&m=a;intn=m;int*p=&m;m=m+5;3a8pm3n定义引用并初始化将引用赋值给变量a=8,对引用的操作就是对被引用者的操作3、引用的功能用做函数的参数或函数的返回值;函数不能返回对局部对象的引用;§2.4引用(续2)例2.3:分析下列程序的输出结果。#includeiostream.hvoidmain(){intval(5);int&refv=val;refv=refv+5;coutvalendl;int*p=&refv,val1(refv);cout*p\tval1endl;}输出101010§2.4引用(续3)示例:int&f(intindex,inta[]){intr=a[index];returnr;}错,r是局部对象4、指针与引用的区别•指针通过地址间接访问某个变量,引用通过别名直接访问某个变量;•引用必须初始化,一旦被初始化后不得再作为其他变量的别名;正确:int&r=a[index];函数不能返回对局部对象的引用§2.4引用(续4)例2.4:分析下列程序的输出结果。#includeiostream.hint&f(intindex,inta[])//返回引用{int&r=a[index];returnr;}voidmain(){intA[]={1,3,5,7,9};f(2,A)=55;for(inti=0;i5;i++)coutA[i]\t;}传址调用(C++中数组自动转换为指针);引用可作左值;输出:135579a[0]91357…a[2]r55ANSIC++标准对引用变量的限制:(1)不能对引用变量取地址。指针变量可定义成二级,即指向指针的指针:char**p;然而不能对引用取地址,用“&&”即进行二级引用是无意义的。例如:&&j;//出错,不能对一个变量使用两个取地址号(2)不能建立引用数组。例如:inta[10];int&ra[10]=a;//出错,没有引用数组(3)对void类型进行引用是不允许的。例如:void&sum();//出错,不能对void类型进行引用(4)引用不能用类型来初始化,因为引用是变量或对象的引用,而不是类型的引用。例如:int&ra=int;//出错(5)有空指针,但无空引用。例如:int*pi=NULL;int&ri=NULL;//毫无意义§2.5C++的运算符一、表达式中的类型转换1.隐式类型转换–表达式中不同数据类型参加运算时,赋值表达式中向左看齐–调用函数时return后表达式向函数返回值类型看齐2.强制类型转换–(类型名)表达式–基本数据类型名(表达式)doublef=6.86;inth=int(f);//inth=(int)f;例2-5一、表达式中的类型转换(续)例2.5隐式类型转换例程。#includeiostream.hintadd(doublex,doubley){cout(2)x+y=x+yendl;returnx+y;}voidmain(){inta;doubleb(3.56),c(4.6);a=b;cout(1)a=a,b=bendl;cout(3)add()=add(b,c)endl;}结果:(1)a=3,b=3.56(2)x+y=8.16(3)add()=8运算符结合规则1()::[].-后置++后置--从左到右23前置++前置--&*!~+-sizeofnewdelete(强制转换类型)从右到左4.*-*从左到右56*/%+-78==910==!=&1112^|1314&&||15?:从右到左16=+=-=*=/=%=&=^=|===17,从左到右二、C++的运算符集(表2-4,P33)三、new运算符的用法new运算符的使用格式如下:new类型(初值表)(1)或new类型(2)(1)new和delete运算符的功能与C语言中的malloc()和fr

1 / 53
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功