您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > c++期末总复习-精华篇
c++复习摘要第一部分——简单的程序设计一、标识符(包括变量名命名规则)1、定义:由数字、大小写字母和下划线组成2、例子:合法:Int(大小写不一样,不是关键字int)、_ab不合法:new和friend(不能与关键字相同)、a+b(不能有+)、2b(开头不能是数字)二、基本数据类型存储空间位数存储形式double864补码int432补码float432补码char18ASCII码特殊:指针*p4(固定为longint类型)string16(固定大小)注1:精度低—自动转换—精度高注2:inta;a=8/3—a=2(int整型)三、常量与变量1、八进制—正负号和0开头,例:012、-057十六进制—正负号和0x或0X开头,例:0x34、-0X682、字符常量(1)普通字符:‘A’、‘0’、‘#’、‘’(空格)(2)转义字符:‘\n’、‘\\’(表示\)、‘\0’(3)‘a’—一个字节,“a”—两个字节(包括‘/0’),长度为1注:‘\ddd’—表示八进制字符‘\xdd’—表示十六进制字符例:strlen(“abc\\\120\0as\0d”)和sizeof(“abc\\\120\0asd”)的值—分析1:其中有a、b、c、\\、\120(八进制)、\0(碰到第一个则终止,且不计入长度),所以结果为5—分析2:算上所有的字符(包括\0,注意有个空格在a与s之间),结果为11(char字符占一个字节)3、指数:2e-6、-1.5E2(结尾加一个f(F),表示结果为float型)注:e(E)后(即指数)必须是整数四、运算符和表达式1、算术运算符+、-、/(不是\)、*(不可省略)、%(取余)注1:++()、--(),其中()中必须是变量,不能是常量和表达式例:5++、(a+b)++、++(2*i)——不合法注2:inti=5,b;b=i++;—b=5;i=6inti=5,c;c=++i;—c=6;i=62、赋值运算符(1)区分“=”和“==”(2)a+=b—a=a+b3、关系运算符和逻辑运算符(1)结果总为1或0例1:t=54—t=(54)—54为真,则结果为1—t的值为1例2:a=1&&2—a=(1!=0)&&(2!=0)—a=1(&&运算优先级高)4、逗号运算符:表达式结果为最后一个逗号后的结果例:a=3*5,a+5—表达式结果为20五、语句1、if(a)—if(a!=0)2、dowhlie语句—至少执行一次例:do{inti=1;j=0}while(a=b)分析:先循环一次,由于条件为i=j—(i=bj)!=0(不是a==b),则结果是无限循环3、switch语句不一定每个case后都有break(跳出当前循环语句,而不是if语句),default至多一个。例:switch(a){case1:cout’A’;break;case2:cout’B’case3:cout’C’;break;}若输入a=2,则输出的结果为BC,程序从第二个开始执行,因为没有break跳出当前程序,会继续执行下面的程序,直到break跳出等。4、for循环:注意是否会无限循环(循环条件的正确性)例:for(intx=0;x=0;x--)—无限循环六、补充1、continue—跳过剩余语句(继续循环,不会跳出)2、constinta=5—a的值不会再变(即a=6—错误)3、运算符优先级逻辑运算符(!&&||)条件运算符(A?B:C)值运算符(=、+=、*=)4、条件运算符—A?B:C例:54?3:2—若A为真,则输出B,否则输出C,所以答案为3第二部分——构造数据类型一、数组1、数组下标只能是常量(a[n]、a[]—不合法)2、inta[20][20]—数组未初始化,则元素的值不确定(除了静态数组未初始化时,默认是0)inta[20][20]={0}—元素全部为0,且每个元素都必须是int型的注:a(5)—a=5,上述数组最后一个元素为a[19][19]3、部分初始化:a[5]={1,2,3}—a[5]={1,2,3,0,0}二、指针1、’*’—取内容,’&’—取地址inta[5]={0},*p,p=&a[0](或p=a)—取出a中的首地址(即a[0])放在p中,则p中所存内容就是a[0]的首地址(*p—即读取p中地址的内容—就是a[0])(1)coutp—p本身的首地址(2)cout&p—取p中所存的地址,再输出—a的首地址(3)cout*p—取p所存首地址的内容—输出a[0](4)cout*(p+1)—指针往后移动一位—输出a[1]注:*(p++)—*(p+1)2、动态内存分配(1)int*p=newfloat[N]—一维数组(这里N为变量)int(*p)[4]=newfloat[3][4]—二维数组最后—delete[]p三、引用1、intr,&rv=r—别名与目标名(即rv和r)共用内存2、类型必须一致,必须立即初始化(int&rv;—错误)例:inta;double&b=a;—错误3、不能中途换名例:inta,c;int&b=a,&c=b;—错误4、数组引用:inta[5]={0};(&rv)[5]=a;四、字符串1、chars[20]=”c++程序设计”,*p=s;(1)sizeof(s)—一共可存放20个元素,每个都是char(占一个字节)—结果为20(2)sizeof(p)—p是指针,一定为4个字节—结果为4(3)Strlen(s)—”c++”为三个字节,”程序设计”(汉字是两个字节)为8个字节(不含’\0’)—结果为11注:chara[5]=”12345”—错误(必须有一个位置放’\0’)2、String(1)stringa=”man”,b=”kind”;—a[1]=’e’—a=”men”—可以当作数组看(2)可以连接:c=a+b—c=”mankind”(3)可以相互赋值:a=b—a=”kind”注:(2)和(3)都是char字符型数组所不能实现的例:chara[5]=”c++”,b[6]=”hello”;a=b;—错误五、其他类型1、枚举类型:enum例:enumseasoon{spring,summer,autumn,winter};seasons=winter—s=3;分析:spring相当于0,后面逐次递增(可以对spring进行默认值设定,令spring=1,后面依次递增)2、结构体:struct—类比——类与对象3、共用体:union注:若干个成员中,其中占用内存最大的,作为共用体类型的大小(不是相加)例:uniona{intx;chars;}—显然占4个字节(int),而不是char的1个字节六、补充1、charname[20]—coutname—输出为字符数组的内容intname[20]—coutname—输出首地址2、char*p=”hello”(类比数组)(1)cout*p—h(2)coutp—hello(3)coutp+1—ello—指针向后移动一位,指向e,再输出后面的内容3、strcmp(s1,s2)—进行大小比较Strcpy(s1,s2)—s1=s2(将s2的内容赋给s1)S=strcat(s1,s2)—将s1与s2的内容进行连接,再给S第三部分——函数一、认识函数1、声明:intadd(inta,intb);—形参不占用空间,可省略为intadd(int,int);(注意要有”;”)调用:z=add(a,b)—a,b均为实参(有内容)例:z=swap(a+b,max(c),v)—swap函数实参为3个(两个逗号)2、c++的程序总是从main函数开始执行的3、函数不允许嵌套定义,但是可以相互调用4、有默认值的形参右边都要有默认值例:int(inta,intb=0)—合法int(inta=0,intb)—不合法5、引用传递:swap(int&x);—x的值与函数结果有关swap(intx);—swap函数只是利用了x的值去运算,而未改变x本身的值二、简单函数1、递归函数(可简化程序,但时间和空间需求大)例:阶乘—intf(intn){if(n==1)return0;elsereturnn*f(n-1);}2、内联函数(提高程序执行效率,以空间换时间):inline例:inlineintadd(inta,intb){}—只能包含一些简单的语句3、系统函数例:sqrt(2)—开方,fabs(-9)—绝对值,rand()—随机函数4、函数重载——功能相似(1)同名函数,但函数的参数类型、个数或者顺序不同(2)函数的返回值类型不能作为函数重载的区分条件(3)不能把功能不同的函数放在一起重载三、其他1、inta就相当于autointa—auto为自动变量,存放于动态存储区,可省略2、extern—外部变量(属于全局变量),定义在函数体(包括mian函数)之外—全局寿命3、static—静态变量(未初始化时,就默认为0)—有记忆功能(记住上一次运行结果)第四部分——类与对象一、类与对象的认识1、c++通过类来实现封装2、面向对象程序设计的三个特征:封装性、多态性和继承性3、在类体内不能对数据成员进行初始化(因为没定义对象)例:ClassA{private:intdata=2;}—错误二、类成员1、private(私有成员)—若开头省略,则默认为私有成员,只有该类的成员才能进行访问私有成员(派生类和对象都不能访问)2、protected(保护成员)—允许派生类访问,不允许对象访问3、public(共有成员)—定义了类的外部接口,允许派生类访问,并可以被对象进行调用4、成员函数类内声明—settime(inta=0,intb=0){}—类外定义—voidClock::settime(inta=0,intb=0){}三、对象1、对象所占据内存只用于存放数据成员(如a、b等),类中函数代码在内存中只占据一份空间2、访问类型:Clockc,*time=&c,则有c.showtime()或(*time).showtime或time-showtime()四、构造函数与析构函数1、构造函数—对象的初始化(1)它是一个与类同名的成员函数,没有返回值,定义为公有函数,只能在定义对象是被系统内自动调用(2)类中可以有多个构造函数,构造函数可以被重载,可以是内联函数(3)带默认参数的构造函数例:构造函数Clock(inta=0,intb=0)—Clockc1,c2(1),c3(1,1)—均是正确的,如c2(1)等价于c2(1,0)(4)复制构造函数:Clock(Clock&c)例:Clockc1;Clockc2(c1)—Clockc2=c1注1:Clock*p—不会调用构造函数Clock*p=&a—出现对象a,则调用构造函数注2:Clocka[4]={c1,c2,c3,c4}—由于有4个元素都被类定义,故调用4次构造函数,程序结束时调用4次析构函数五、析构函数:~Clock()—()中不能有参数1、析构函数属于公有成员,不能重载,但可以是虚函数2、当对象被删除或者程序结束时,自动调用析构函数例:Clock*p=newClocka;delete[]p—申请的空间被删除,则对象也消失,故调用一次析构函数3、一般情况下,调用几次构造函数,结束时就相反顺序调用几次析构函数六、友元:friend1、实现不同类之间的数据共享,但破坏了类的封装性和隐蔽性2、友元函数—不属于类的成员函数,可以访问类的所有成员(包括私有成员)3、友元类:如ClassA{...friendClassB;...}—意味着B类是A类的友元类—B类的所有成员函数都可以访问A类的所有成员4、友元关系不能传递且是单向的(A是B的友元函数,但B不是A的友元函数),友元关系不会
本文标题:c++期末总复习-精华篇
链接地址:https://www.777doc.com/doc-7028020 .html