《2022年c++期末总复习-精华篇教学内容 .pdf》由会员分享,可在线阅读,更多相关《2022年c++期末总复习-精华篇教学内容 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、c+期 末 总 复 习 - 精 华篇名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - c+复习摘要第一部分简单的程序设计一、标识符(包括变量名命名规则)1、定义:由数字、大小写字母和下划线组成2、例子:合法: Int(大小写不一样,不是关键字int)、 _ab 不合法: new 和 friend(不能与关键字相同)、a+b(不能有+)、2b(开头不能是数字)二、基本数据类型存储空间位数存储形式double 8 64 补码int
2、4 32 补码float 4 32 补码char 1 8 ASCII 码特殊:指针 *p 4(固定为 long int 类型)string 16(固定大小)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - - 注 1:精度低 自动转换 精度高注 2:int a;a=8/3a=2(int 整型 ) 三、常量与变量1、八进制 正负号和 0 开头,例: 012、-057 十六进制 正负号和0 x 或 0X 开头,例: 0 x34、-0X6
3、8 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,注意有个空格在a与 s 之间),结果为11(char字符占一个字节)3、指数: 2e-6、-1.5E2(结尾加一个f(F),表示结果为float型
4、) 注: e(E)后(即指数 )必须是整数四、运算符和表达式1、算术运算符名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - +、-、/(不是 )、 *(不可省略)、%(取余)注 1:+()、 -(),其中()中必须是变量,不能是常量和表达式例: 5+、( a+b)+、+(2*i )不合法注 2:int i=5 ,b;b=i+ ; b=5;i=6 int i=5 ,c;c=+i ; c=6;i=6 2、赋值运算符(1)区分“ =”
5、和“=”(2)a+=ba=a+b 3、关系运算符和逻辑运算符(1)结果总为1 或 0 例 1:t=54t=(54) 54 为真,则结果为1t 的值为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) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
6、 - - - 第 4 页,共 19 页 - - - - - - - - - 分析:先循环一次,由于条件为i=j (i=bj)!=0 (不是a=b),则结果是无限循环3、switch 语句不一定每个case后都有 break(跳出当前循环语句,而不是if 语句), default 至多一个。例: switch(a)case 1:cout A ;break; case 2:cout Bcase 3:cout C ;break; 若输入 a=2,则输出的结果为BC,程序从第二个开始执行,因为没有break 跳出当前程序,会继续执行下面的程序,直到 break跳出等。4、for 循环:注意是否会无限循
7、环(循环条件的正确性)例: for(int x=0;x无限循环六、补充1、continue跳过剩余语句(继续循环,不会跳出)2、const int a=5a 的值不会再变 (即 a=6错误 ) 3、运算符优先级逻辑运算符(!&| )条件运算符 (A?B:C) 值运算符(=、+=、*=) 4、条件运算符 A?B:C 例: 54?3:2若 A 为真,则输出B,否则输出C,所以答案为 3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 19 页 - - - - - - - -
8、- 第二部分构造数据类型一、数组1、数组下标只能是常量(an、a不合法)2、int a2020 数组未初始化,则元素的值不确定(除了静态数组未初始化时,默认是0)int a2020=0元素全部为0,且每个元素都必须是int 型的注: a(5)a=5,上述数组最后一个元素为a1919 3、部分初始化: a5=1,2,3 a5=1,2,3,0,0 二、指针1、 * 取内容, & 取地址int a5=0 , *p , p=&a0(或 p=a) 取出 a中的首地址 (即 a0)放在 p 中,则 p 中所存内容就是 a0的首地址 (*p 即读取 p 中地址的内容就是a0) (1)coutp 本身的首地址
9、(2)cout取 p 中所存的地址,再输出a 的首地址(3)cout取 p 所存首地址的内容输出 a0 (4)cout指针往后移动一位输出 a1 注: *(p+) *(p+1) 2、动态内存分配名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 19 页 - - - - - - - - - (1)int *p=new floatN一维数组(这里N 为变量)int (*p)4=new float34二维数组最后 delete p 三、引用1、int r,&rv=r 别名与目标名
10、(即rv 和 r)共用内存2、类型必须一致,必须立即初始化(int &rv; 错误)例: int a;double &b=a; 错误3、不能中途换名例: int a,c;int &b=a,&c=b; 错误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、结果为 11 注: char a5=” 12345” 错误(必须有一个位置放 0 )2、String (1) string a=” man” ,b=” kind” ;a1= e a=” men” 可以当作数组看(2) 可以连接: c=a+bc=” mankind”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - (3) 可以相互赋值:a=ba=” kind”注: (2)和(3)都是 char字符型数组所不能实现的例: char
12、a5=” c+” ,b6= ” hello” ;a=b;错误五、其他类型1、枚举类型: enum 例: enum seasoon spring,summer,autumn,winter; season s=winters=3; 分析: spring 相当于 0,后面逐次递增(可以对 spring 进行默认值设定,令spring=1,后面依次递增) 2、结构体: struct类比类与对象3、共用体: union 注:若干个成员中,其中占用内存最大的,作为共用体类型的大小(不是相加)例: union aint x;char s; 显然占 4 个字节 (int),而不是char 的 1 个字节六、补
13、充1、char name20cout输出为字符数组的内容 int name20 cout输出首地址2、char *p=” hello” (类比数组 ) (1)couth (2)couthello 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - (3)coutello指针向后移动一位,指向e,再输出后面的内容3、strcmp(s1,s2)进行大小比较 Strcpy(s1,s2)s1=s2(将 s2的内容赋给s1) S=strca
14、t(s1,s2)将 s1 与 s2的内容进行连接,再给S 第三部分函数一、认识函数1、声明: int add(int a,int b); 形参不占用空间,可省略为int add(int,int);( 注意要有 ” ;” ) 调用: z=add(a,b)a,b均为实参 (有内容 ) 例: z=swap(a+b,max(c),v) swap 函数实参为3 个(两个逗号) 2、c+的程序总是从main 函数开始执行的3、函数不允许嵌套定义,但是可以相互调用4、有默认值的形参右边都要有默认值例: int(int a,int b=0) 合法 int(int a=0,int b) 不合法5、引用传递: s
15、wap(int &x); x 的值与函数结果有关swap(int x); swap 函数只是利用了x 的值去运算,而未改变 x 本身的值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 19 页 - - - - - - - - - 二、简单函数1、递归函数 (可简化程序,但时间和空间需求大) 例:阶乘 int f(int n)if(n=1)return0;else return n*f(n-1); 2、内联函数 (提高程序执行效率,以空间换时间):inline 例: inl
16、ine int add(int a,int b)只能包含一些简单的语句3、系统函数例: sqrt(2)开方, fabs(-9)绝对值, rand()随机函数4、函数重载功能相似(1)同名函数,但函数的参数类型、个数或者顺序不同(2)函数的返回值类型不能作为函数重载的区分条件(3)不能把功能不同的函数放在一起重载三、其他1、int a 就相当于 auto int aauto 为自动变量,存放于动态存储区,可省略2、extern外部变量 (属于全局变量 ),定义在函数体(包括mian 函数 )之外 全局寿命3、static静态变量 (未初始化时,就默认为0)有记忆功能 (记住上一次运行结果) 第四
17、部分类与对象名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - - - - - - - 一、类与对象的认识1、c+通过 类来实现封装2、面向对象程序设计的三个特征:封装性 、多态性 和继承性3、在类体内不能对数据成员进行初始化(因为没定义对象) 例: Class Aprivate:int data=2; 错误二、类成员1、private(私有成员 )若开头省略,则默认为私有成员,只有该类的成员才能进行访问私有成员(派生类和对象都不能访问 ) 2、pro
18、tected(保护成员 )允许派生类访问,不允许对象访问3、public( 共有成员 )定义了类的外部接口,允许派生类访问,并可以被对象进行调用4、成员函数类内声明settime(int a=0,int b=0)类外定义 void Clock : settime(int a=0,int b=0) 三、对象1、对象所占据内存只用于存放数据成员(如 a、b 等),类中函数代码在内存中只占据一份空间2、访问类型: Clock c,*time=&c ,则有 c.showtime() 或(*time).showtime 或 time-showtime() 四、构造函数与析构函数1、构造函数 对象的初始化
19、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 - - - - - - - - - (1)它是一个与类同名的成员函数,没有返回值,定义为公有函数,只能在定义对象是被系统内自动调用(2)类中可以有多个构造函数,构造函数可以被重载,可以是内联函数(3)带默认参数的构造函数例:构造函数 Clock(int a=0,int b=0) Clock c1,c2(1),c3(1,1)均是正确的,如c2(1)等价于 c2(1,0) (4)复制构造函数:Clock(Clock
20、&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 次析构函数五、析构函数:Clock() ()中不能有参数1、析构函数属于公有成员,不能重载,但可以是虚函数2、当对象被删除或者程序结束时,自动调用析构函数例: Clock *p=new Clock a;delete p 申请的空间被删除,则对象也消失,故调用一次析构函数3、一般情况下,调用几次构造函数,
21、结束时就相反顺序调用几次析构函数六、友元: friend 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 19 页 - - - - - - - - - 1、实现不同类之间的数据共享,但破坏了类的封装性和隐蔽性2、友元函数 不属于类的成员函数,可以访问类的所有成员 (包括私有成员 ) 3、友元类:如Class A.friend Class B;. 意味着 B 类是 A 类的友元类 B 类的所有成员函数都可以访问A 类的所有成员4、友元关系不能传递且是单向的(A 是 B 的
22、友元函数,但B不是 A 的友元函数 ),友元关系不会被继承七、其他1、this 指针:存在于类的成员函数中,用于区分数据成员(除静态数据成员外) 2、静态成员: static (1)不属于某个对象,属于整个类(只能通过类名进行访问) (2)类外初始化,同样具有” 记忆功能 ”3、const可用于对函数重载的区分4、类别对象是否可以访问派生类是否可以访问private 否否protected 否是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 19 页 - - - - -
23、 - - - - public 是是5、类别可以重载或内联数量是否可以有形参构造函数是一或多是析构函数否一否注:均无返回类型(如 int、double),析构函数可以是虚函数第五部分继承与派生一、继承1、若省略继承方式,则默认为私有继承例: Class A:B Class A:private B 2、派生类继承了基类除去构造函数 和析构函数 之外的全部数据成员和函数成员派生类中也有和基类一样的函数3、同名覆盖 派生类中的新的同名函数覆盖基类的函数4、继承方式 基类中的成员将在派生类中有的访问权限例: Class B:protected A A 中的成员在派生类中的访问权限是 protected
24、(故派生类的对象不能访问,派生类可以访问) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - 注: A 中的 public 和 protected 在 B 中的访问权限都变成protected 注 1:派生类的对象可以访问基类的public 注 2:即使基内的private 在派生类不可访问却仍然存在注 3:private 属于 ” 传递一代 ” ,protected 可以 ” 多代传递 ”二、派生1、派生类的构造函数和析构函
25、数(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 的构造函数2、虚基类(1)消除多继承引起的二义性,消除数据冗余(2)通过虚基类继承,最后建立对象的类(称
26、之为最远派生类),才调用虚基函数的构造函数保证对虚基类的对象只初始化一次三、其他名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 19 页 - - - - - - - - - 1、若基类的构造函数有默认值,则派生类就不必给基类传递数据例: Class AA(int x=1);Class BB(int y=1)而不必写成Class BB(int y,int x):A(x) 2、积累与派生类的赋值兼容(1)派生类的对象可以赋值给基类对象就是派生类将基类的那部分赋值给基类反之不
27、行(2)同一基类的不同派生类对象不能相互赋值(只是交集,不是包含关系 ) 总结:派生类可以对基类进行操作即(基类 )=(派生类 )的操作是对的,反之都是错的例: Class AClass B:public A A a;B b;a=b( 对)b=a(错误 ) 3、判断是否可以访问类别基本身派生类派生类的对象基的私有成员是否否基的保护成员是是否基的公有成员是是是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 19 页 - - - - - - - - - 第六部分多态性一、编
28、译时的多态:函数重载、运算符重载运行时的多态:虚函数二、运算符重载:operator 1、成员函数 =、()、 (这些只能为成员函数) 例:加法 类中声明 :Complex operator+(Complex &c) 类外定义: Complex:Complex operator+(Complex &c)函数的实现: c3=c1+c2 注:成员函数隐藏一个this 指针 ,故参数比非成员函数少一个2、非成员函数: friend 函数返回值类型 operator 运算符 (形参表 ) 例: friend Complex operator+(Complex &c1,Complex &c2) 注: ”
29、 ” 和” 只改变功能(4)重载函数不能有默认参数,且必须至少有一个类的对象例 1:Complex operator+(Complex &c=2) 不合法例 2:Complex operator+(int &c) 至少一个 Complex 类对象(5)operator =(无形参 )前缀一元运算符(6)对于 +a,重载为成员函数a.operater+() 重载为非成员函数operator+(a) 对于 a+,重载为成员函数a.operater+(0) 重载为非成员函数operator+(a,0) 注 1:可知 ,成员函数的形参比非成员函数少一个(this 的作用) 注 2:某一填空题bool
30、Bounce operator!(Bounce) 三、虚函数1、例: A a,*p;B b; 则基类对象的指针在指向派生类时,只会指向派生类中的基类部分(谁定义你,你就只与谁有关) 虚函数可以使基类中的函数” 隐藏起来 ” ,从而使指针指向派生类的同名函数2、只有类的成员函数才能是虚函数(构造函数不行,析构函数可以 ),非成员函数都不行,内联函数不行,静态函数不行名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 19 页 - - - - - - - - - 3、必须为 p
31、ublic 继承,由 ” 基类对象的指针或引用” 去掉用基函数,才能实现动态绑定四、纯虚函数和抽象类1、纯虚函数: virtual void hello(int x)=0; 2、一个类包含了纯虚函数,则为抽象类抽象类不能定义对象,只能为基类3、派生类若没给出基类的纯虚函数的函数实现(即定义一个与纯虚函数同名的有实际作用的函数)仍不能定义对象,还是一个抽象类(没有同名函数覆盖纯虚函数) 4、虚析构函数 使派生类的析构函数先执行,再执行基类的析构函数否则可能有内存泄漏(只执行了基类的析构函数 ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 19 页 - - - - - - - - -