c++期末总复习-精华篇_第1页
c++期末总复习-精华篇_第2页
c++期末总复习-精华篇_第3页
c++期末总复习-精华篇_第4页
c++期末总复习-精华篇_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.c+复习摘要第一部分简单的程序设计一、标识符(包括变量名命名规则)1、定义:由数字、大小写字母和下划线组成2、例子:合法: Int (大小写不一样,不是关键字int )、 _ab不合法: new 和 friend(不能与关键字相同) 、a+b(不能有 +)、2b(开头不能是数字)二、基本数据类型存储空间位数存储形式double864补码int432补码float432补码char18ASCII码特殊:指针 *p4(固定为 long int 类型)string16(固定大小)注 1:精度低 自动转换 精度高注 2: int a;a=8/3 a=2(int 整型 )三、常量与变量1、八进制 正负

2、号和 0 开头,例: 012、 -057十六进制 正负号和0x 或 0X 开头,例: 0x34、 -0X681 / 17.2、字符常量(1)普通字符: A、 0、 #、 (空格)(2)转义字符: n 、(表示 ) 、0 (3) a 一个字节,“a” 两个字节(包括/0),长度为 1注: ddd 表示八进制字符xdd 表示十六进制字符例: strlen( “abc1200a s0d”)和 sizeof(“abc1200a sd ”)的值分析 1:其中有 a、b、c、 、 120( 八进制 )、 0 (碰到第一个则终止,且不计入长度) ,所以结果为 5分析 2:算上所有的字符(包括0 ,注意有个空

3、格在a 与s 之间),结果为 11( char 字符占一个字节)3、指数: 2e-6、-1.5E2(结尾加一个f(F),表示结果为float 型 )注: e(E)后(即指数 )必须是整数四、运算符和表达式1、算术运算符+、 -、 / (不是)、* (不可省略)、 %(取余)注 1:+()、-(),其中()中必须是变量,不能是常量和表达式例: 5+、( a+b)+、 +(2*i )不合法注 2: int i=5 ,b; b=i+; b=5; i=62 / 17.int i=5 , c; c=+i; c=6;i=62、赋值运算符( 1)区分“ =”和“ =”( 2) a+=b a=a+b3、关系运

4、算符和逻辑运算符(1)结果总为1 或 0例 1:t=54t=(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、 do whlie 语句 至少执行一次例: do int i=1;j=0while(a=b)分析:先循环一次, 由于条件为i=j (i=bj)!=0(不是 a=b),则结果是无限循环3、 switch 语句不一定每个case 后都有 break(跳出当前循环语句,而不是if

5、 语句), default 至多一个。例: switch ( a) case 1:coutA;break;case 2:coutBcase 3:coutC;break;若输入 a=2,则输出的结果为BC,程序从第二个开始执行,3 / 17.因为没有 break 跳出当前程序,会继续执行下面的程序,直到break 跳出等。4、 for 循环:注意是否会无限循环(循环条件的正确性)例: for(int x=0;x无限循环六、补充1、 continue 跳过剩余语句(继续循环,不会跳出)2、 const int a=5 a 的值不会再变 (即 a=6错误 )3、运算符优先级逻辑运算符(!&| ) 条

6、件运算符 (A?B:C) 值运算符 (=、+=、 *=)4、条件运算符A?B:C例: 54?3:2 若 A 为真,则输出B,否则输出 C,所以答案为 3第二部分构造数据类型一、数组1、数组下标只能是常量(an 、 a 不合法)2、 int a2020 数组未初始化,则元素的值不确定(除了静态数组未初始化时,默认是0)int a2020=0 元素全部为0,且每个元素都必须是int型的4 / 17.注: a(5)a=5,上述数组最后一个元素为a19193、部分初始化: a5=1,2,3 a5=1,2,3,0,0 二、指针1、 * 取内容, & 取地址int a5=0 , *p , p=&a0( 或

7、 p=a)取出 a 中的首地址 (即 a0)放在 p 中,则 p 中所存内容就是 a0 的首地址 (*p 即读取 p 中地址的内容 就是 a0)(1)coutp 本身的首地址(2)cout取 p 中所存的地址,再输出a 的首地址(3)cout取 p 所存首地址的内容输出 a0(4)cout指针往后移动一位输出 a1注: *(p+) *(p+1)2、动态内存分配(1)int *p=new floatN 一维数组(这里N 为变量)int (*p)4=new float34 二维数组最后 delete p三、引用1、 int r,&rv=r 别名与目标名(即rv 和 r)共用内存2、类型必须一致,必

8、须立即初始化(int &rv; 错误)例: int a;double &b=a; 错误3、不能中途换名例: int a,c;int &b=a,&c=b; 错误5 / 17.4、数组引用 :int a5=0;(&rv)5=a ;四、字符串1、 char s20=”c+程序设计 ”,*p=s ;(1)sizeof(s)一共可存放20 个元素,每个都是char(占一个字节 ) 结果为 20(2)sizeof(p) p 是指针,一定为4 个字节 结果为 4(3)Strlen(s)”c+”为三个字节, ”程序设计 ”(汉字是两个字节 ) 为 8 个字节 (不含 0 ) 结果为 11注: char a5=

9、 ”12345” 错误(必须有一个位置放0 )2、 String(1) string a=”man”,b=”kind”; a1=e a=”men”可以当作数组看(2) 可以连接: c=a+bc=”mankind ”(3) 可以相互赋值: a=ba=”kind ”注: (2)和(3)都是 char 字符型数组所不能实现的例: char a5= ”c+”,b6= ”hello ”;a=b; 错误五、其他类型1、枚举类型: enum例: enum seasoon spring,summer,autumn,winter;season s=winters=3;分析: spring 相当于 0,后面逐次递

10、增 (可以对 spring 进行默认值设定,令 spring=1,后面依次递增 )6 / 17.2、结构体: struct 类比类与对象3、共用体: union注:若干个成员中,其中占用内存最大的,作为共用体类型的大小(不是相加)例: union aint x;char s; 显然占 4 个字节 (int), 而不是 char的 1 个字节六、补充1、 char name20 cout输出为字符数组的内容int name20 cout输出首地址2、 char *p= ”hello ”(类比数组 )(1)couth(2)couthello(3)coutello 指针向后移动一位,指向e,再输出后

11、面的内容3、 strcmp(s1,s2) 进行大小比较Strcpy(s1,s2) s1=s2(将 s2 的内容赋给s1)S=strcat(s1,s2) 将 s1 与 s2 的内容进行连接,再给S第三部分函数一、认识函数1、声明: int add(int a,int b);形参不占用空间,可省略为int add(int,int);( 注意要有 ”;”)7 / 17.调用: z=add(a,b) a,b 均为实参 (有内容 )例:z=swap(a+b,max(c),v)swap 函数实参为3 个 (两个逗号 )2、 c+的程序总是从main 函数开始执行的3、函数不允许嵌套定义,但是可以相互调用4

12、、有默认值的形参右边都要有默认值例: int(int a,int b=0) 合法int(int a=0,int b) 不合法5、引用传递: swap(int &x); x 的值与函数结果有关swap(int x); swap 函数只是利用了x 的值去运算,而未改变 x 本身的值二、简单函数1、递归函数 (可简化程序,但时间和空间需求大)例:阶乘 int f(int n)if(n=1)return0;else return n*f(n-1);2、内联函数 (提高程序执行效率,以空间换时间): inline例: inline int add(int a,int b) 只能包含一些简单的语句3、系统

13、函数例: sqrt(2) 开方, fabs(-9) 绝对值, rand() 随机函数4、函数重载功能相似(1)同名函数,但函数的参数类型、个数或者顺序不同(2)函数的返回值类型不能作为函数重载的区分条件(3)不能把功能不同的函数放在一起重载三、其他8 / 17.1、 int a 就相当于 auto int a auto 为自动变量, 存放于动态存储区,可省略2、 extern 外部变量 (属于全局变量),定义在函数体(包括mian 函数 )之外 全局寿命3、 static静态变量 (未初始化时,就默认为0) 有记忆功能(记住上一次运行结果)第四部分类与对象一、类与对象的认识1、 c+通过 类来

14、实现封装2、面向对象程序设计的三个特征:封装性 、多态性 和继承性3、在类体内不能对数据成员进行初始化(因为没定义对象)例: Class Aprivate:int data=2; 错误二、类成员1、 private( 私有成员 ) 若开头省略, 则默认为私有成员,只有该类的成员才能进行访问私有成员(派生类和对象都不能访问 )2、 protected( 保护成员 ) 允许派生类访问,不允许对象访问3、 public( 共有成员 ) 定义了类的外部接口,允许派生类访问,并可以被对象进行调用9 / 17.4、成员函数类内声明settime(int a=0,int b=0) 类外定义 void Clo

15、ck:settime(int a=0,int b=0)三、对象1、对象所占据内存只用于存放数据成员(如 a、b 等 ),类中函数代码在内存中只占据一份空间2、访问类型: Clock c,*time=&c ,则有 c.showtime()或 (*time).showtime 或 time-showtime()四、构造函数与析构函数1、构造函数 对象的初始化(1)它是一个与类同名的成员函数,没有返回值,定义为公有函数,只能在定义对象是被系统内自动调用(2)类中可以有多个构造函数,构造函数可以被重载,可以是内联函数(3)带默认参数的构造函数例:构造函数Clock(int a=0,int b=0) C

16、lock c1,c2(1),c3(1,1)均是正确的,如 c2(1)等价于 c2(1,0)(4)复制构造函数:Clock(Clock &c)例: Clock c1;Clock c2(c1) Clock c2=c1注 1: Clock *p 不会调用构造函数Clock *p=&a 出现对象 a,则调用构造函数注 2:Clock a4=c1,c2,c3,c4 由于有 4 个元素都被类定义,故调用 4 次构造函数,程序结束时调用4 次析构函数10 / 17.五、析构函数:Clock() ()中不能有参数1、析构函数属于公有成员,不能重载,但可以是虚函数2、当对象被删除或者程序结束时,自动调用析构函数

17、例:Clock *p=new Clock a;delete p 申请的空间被删除,则对象也消失,故调用一次析构函数3、一般情况下,调用几次构造函数,结束时就相反顺序调用几次析构函数六、友元: friend1、实现不同类之间的数据共享,但破坏了类的封装性和隐蔽性2、友元函数 不属于类的成员函数,可以访问类的所有成员(包括私有成员 )3、友元类:如Class A.friend Class B;. 意味着 B 类是 A类的友元类 B 类的所有成员函数都可以访问A 类的所有成员4、友元关系不能传递且是单向的(A 是 B 的友元函数,但B不是 A 的友元函数 ),友元关系不会被继承七、其他1、 this

18、 指针:存在于类的成员函数中, 用于区分数据成员 (除静态数据成员外 )2、静态成员: static(1)不属于某个对象,属于整个类(只能通过类名进行访问)11 / 17.(2)类外初始化,同样具有”记忆功能 ”3、 const 可用于对函数重载的区分4、类别对象是否可以访问派生类是否可以访问private否否protected否是public是是5、类别可以重载或内联数量是否可以有形参构造函数是一或多是析构函数否一否注:均无返回类型 (如 int 、double), 析构函数可以是虚函数第五部分继承与派生一、继承1、若省略继承方式,则默认为私有继承例: Class A:B Class A:p

19、rivate B2、派生类继承了基类除去 构造函数 和析构函数 之外的全部数据成员和函数成员 派生类中也有和基类一样的函数3、同名覆盖 派生类中的新的同名函数覆盖基类的函数4、继承方式 基类中的成员将在派生类中有的访问权限例:Class B:protected A A 中的成员在派生类中的访问权限是 protected( 故派生类的对象不能访问,派生类可以访问)12 / 17.注: A 中的public 和 protected在 B 中的访问权限都变成protected注 1:派生类的对象可以访问基类的public注 2:即使基内的 private 在派生类不可访问却仍然存在注 3: priv

20、ate 属于 ”传递一代 ”,protected 可以 ”多代传递 ” 二、派生1、派生类的构造函数和析构函数(1)例: Clock(int a,char b):Point(b)注:派生类构造函数既要初始化派生类新增的成员,也要为他的基类的构造函数传递数据引用了基类的构造函数(2)派生类定义对象时,构造函数调用顺序:先基类内嵌对象 最后派生类例: Class B:public Apiblic:A a;故先调用两次A 的构造函数,在调用B 的构造函数一次析构函数则反向执行注:若为多继承Class C:public A,protected B 则顺序执行A的构造函数,再是B 的构造函数,最后是C

21、的构造函数2、虚基类(1)消除多继承引起的二义性,消除数据冗余(2)通过虚基类继承, 最后建立对象的类(称之为最远派生类),才调用虚基函数的构造函数保证对虚基类的对象只初始化一次三、其他13 / 17.1、若基类的构造函数有默认值,则派生类就不必给基类传递数据例: Class AA(int x=1);Class BB(int y=1) 而不必写成Class BB(int y,int x):A(x)2、积累与派生类的赋值兼容(1)派生类的对象可以赋值给基类对象就是派生类将基类的那部分赋值给基类反之不行(2)同一基类的不同派生类对象不能相互赋值(只是交集,不是包含关系 )总结:派生类可以对基类进行

22、操作即(基类 )=(派生类 )的操作是对的,反之都是错的例: Class AClass B:public AA a;B b;a=b(对) b=a(错误 )3、判断是否可以访问类别基本身派生类派 生 类 的 对 象基的私有成员是否否基的保护成员是是否基的公有成员是是是第六部分多态性一、编译时的多态:函数重载、运算符重载运行时的多态:虚函数14 / 17.二、运算符重载:operator1、成员函数=、 、()、 (这些只能为成员函数)例:加法 类中声明 :Complex operator+(Complex&c) 类外定义: Complex:Complex operator+(Complex &c) 函数的实现: c3=c1+c2注:成员函数隐藏一个this 指针 ,故参数比非成员函数少一个2、非成员函数: friend函数返回值类型operator 运算符 (形参表 )例: friend Complex operator+(Complex &c1,Complex &c2)注: ”和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论