c期末总复习精华篇Word文档下载推荐.docx
- 文档编号:17749912
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:12
- 大小:29.74KB
c期末总复习精华篇Word文档下载推荐.docx
《c期末总复习精华篇Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c期末总复习精华篇Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
‘\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、(结尾加一个f(F),表示结果为float型)
e(E)后(即指数)必须是整数
四、运算符和表达式
1、算术运算符
+、-、/(不是)、*(不可省略)、%(取余)
注1:
++()、--(),其中()中必须是变量,不能是常量和表达式
5++、(a+b)++、++(2*i)——不合法
inti=5,b;
b=i++;
—>b=5;
i=6
inti=5,c;
c=++i;
—>c=6;
2、赋值运算符
(1)区分“=”和“==”
(2)a+=b—>
a=a+b
3、关系运算符和逻辑运算符
(1)结果总为1或0
例1:
t=5>
4—>
t=(5>
4)—>
5>
4为真,则结果为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)!
=O(不是a==b),
则结果是无限循环
3、switch语句不一定每个case后都有break(跳出当前循环语句,而不是if语句),default至多一个。
switch(a){case1:
cout<
<
'
A'
;
break;
case2:
B'
case3:
C'
}
若输入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)>t运算符(二、+=、*=)
4、条件运算符—>A?
C
5>4?
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)cout<<p—>p本身的首地址
⑵coutvv&
p—>取p中所存的地址,再输出一>a的首地址
(3)coutvv*p—>取p所存首地址的内容一>输出a[0]
(4)coutvv*(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;
—>错误)
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
⑶Strlen(s)—>
”++”为三个字节,”程序设计”汉字是两个字节)为8个字节(不含'
\0'
)—>
结果为11
chara[5]=”2345”一>
错误(必须有一个位置放\0'
2、String
(1)stringa=”man”,b=”kind”;
一>
a[1]=>
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]—>
name—>
输出为字符数组的内容intname[20]—>
name—>
输出首地址
2、char*p=”hello”(类比数组)
(1)cout<
*p—>
h
(2)cout<
p—>
hello
⑶coutvvp+1—>
ello—>
指针向后移动一位,指向e,再输出后面
的内容
3、strcmp(s1,s2)—>
进行大小比较
Strcpy(s1,s2)—羽仁s2将s2的内容赋给s1)
S=strcat(s1,s2—>
将si与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;
}—>错误
亠、」人t[、.I—r
二、类成员
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,则有()
或(*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
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、一般情况下,调用几次构造函数,结束时就相反顺序调用几
次析构函数
六、友元:
friend
1、实现不同类之间的数据共享,但破坏了类的封装性和隐蔽性
2、友元函数—>不属于类的成员函数,可以访问类的所有成员(包括私有成员)
3、友元类:
如ClassA{...friendClassB;
...}—>意味着B类是A类的友元类一>B类的所有成员函数都可以访问A类的所有成员
4、友元关系不能传递且是单向的(A是B的友元函数,但B不是
A的友元函数),友元关系不会被继承
七、其他
1、this指针:
存在于类的成员函数中,用于区分数据成员(除静态数据成员外)
2、静态成员:
static
(1)不属于某个对象,属于整个类(只能通过类名进行访问)
(2)类外初始化,同样具有”记忆功能”
3、const可用于对函数重载的区分
4、类别
对象是否可以访问
派生类是否可以访问
private
否
protected
是
public
5、类别
可以重载或内联
数量是否可以有形参构
造函数
是一或多
析构函数
一否
均无返回类型(如int、double),析构函数可以是虚函数
第五部分——继承与派生
一、继承
1、若省略继承方式,则默认为私有继承
ClassA:
B—>ClassA:
privateB
2、派生类继承了基类除去构造函数和析构函数之外的全部数
据成员和函数成员—>派生类中也有和基类一样的函数3、同名覆盖—>派生类中的新的同名函数覆盖基类的函数
4、继承方式—>基类中的成员将在派生类中有的访问权限例:
ClassB:
protectedA—>A中的成员在派生类中的访问权限是protected(故派生类的对象不能访问,派生类可以访问)
A中的public和protected在B中的访问权限都变成protected
派生类的对象可以访问基类的public
即使基内的private在派生类不可访问却仍然存在
注3:
private属于”传递一代”,protected可以”多代传递”
二、派生
1、派生类的构造函数和析构函数
(1)例:
Clock(inta,charb):
Point(b)
派生类构造函数既要初始化派生类新增的成员,也要为他的基类的构造函数传递数据—>引用了基类的构造函数
(2)派生类定义对象时,构造函数调用顺序:
先基类—>内嵌对象
—>最后派生类
ClassB:
publicA{piblic:
Aa;
}—>故先调用两次A的构造函数,在调用B的构造函数一次—>析构函数则反向执行
若为多继承ClassC:
publicA,protectedB—>则顺序执行A的构造函数,再是B的构造函数,最后是C的构造函数
2、虚基类
(1)消除多继承引起的二义性,消除数据冗余
(2)通过虚基类继承,最后建立对象的类(称之为最远派生类),才
调用虚基函数的构造函数—>保证对虚基类的对象只初始化一
次
1、若基类的构造函数有默认值,则派生类就不必给基类传递数据
ClassA{A(intx=1){}};
ClassB{B(inty=1){}}—>而不必写成
ClassB{B(inty,intx):
A(x){}}
2、积累与派生类的赋值兼容
(1)派生类的对象可以赋值给基类对象—>就是派生类将基类的
那部分赋值给基类—>反之不行
(2)同一基类的不同派生类对象不能相互赋值(只是交集,不是包
含关系)
总结:
派生类可以对基类进行操作—>即(基类)=(派生类)的操作
是对的,反之都是错的
ClassA—>ClassB:
publicA—>Aa;
Bb;
a=b(对)一>b=a(错误)
3、判断是否可以访问
类别
基本身
派生类
派生类的对象基的私
有成员
基的保护成员
基的公有成员
第六部分——多态性
一、编译时的多态:
函数重载、运算符重载
运行时的多态:
虚函数
二、运算符重载:
operator
1、成员函数——=、[]、()、—>
(这些只能为成员函数)例:
加法—>
类中声明:
Complexoperator+(Complex&
c)—>
类外定义:
Complex:
:
函数的实现:
c3=c1+c2
成员函数隐藏一个this指针,故参数比非成员函数少一个
2、非成员函数:
friend函数返回值类型operator运算符(形参表)例:
friendComplexoperator+(Complex&
c1,Complex&
c2)注:
”>
>
”和”<
”只能重载为非成员函数
3、规则和限制
⑴只能对已有的C++运算符进行重载
ab、+++则是非法的
(2)下列运算符不能重载
.(成员运算符)、*、:
、?
、sizeof
(3)重载不改变运算符的优先级、结构、操作个数—>只改变功能
(4)重载函数不能有默认参数,且必须至少有一个类的对象
Complexoperator+(Complex&
c=2)—>不合法
例2:
Complexoperator+(int&
c)—>至少一个Complex类对象
(5)operator=(无形参)—>前缀一元运算符
⑹对于++a,重载为成员函数一>++()
重载为非成员函数—>operator++(a)
对于a++,重载为成员函数一>++(0)重载为非成员函数—>operator++(a,0)
可知,成员函数的形参比非成员函数少一个(this的作用)
某一填空题—>boolBounceoperator!
(Bounce)
三、虚函数
1、例:
Aa,*p;
—>则基类对象的指针在指向派生类时,只会指
向派生类中的基类部分(谁定义你,你就只与谁有关)
—>虚函数可以使基类中的函数”隐藏起来”,从而使指针指向派
生类的同名函数
2、只有类的成员函数才能是虚函数(构造函数不行,析构函数可以),非成员函数都不行,内联函数不行,静态函数不行
3、必须为public继承,由”基类对象的指针或引用”去掉用基函数,才能实现动态绑定
四、纯虚函数和抽象类
1、纯虚函数:
virtualvoidhello(intx)=0;
2、一个类包含了纯虚函数,则为抽象类—>抽象类不能定义对
象,只能为基类
3、派生类若没给出基类的纯虚函数的函数实现(即定义一个与
纯虚函数同名的有实际作用的函数)—>仍不能定义对象,还是一个抽象类(没有同名函数覆盖纯虚函数)
4、虚析构函数—>使派生类的析构函数先执行,再执行基类的析构函数—>否则可能有内存泄漏(只执行了基类的析构函数)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期末 复习 精华