收藏 分享(赏)

c++期末总复习-精华篇.docx

上传人:cjc2202537 文档编号:5594328 上传时间:2019-03-09 格式:DOCX 页数:17 大小:28.51KB
下载 相关 举报
c++期末总复习-精华篇.docx_第1页
第1页 / 共17页
c++期末总复习-精华篇.docx_第2页
第2页 / 共17页
c++期末总复习-精华篇.docx_第3页
第3页 / 共17页
c++期末总复习-精华篇.docx_第4页
第4页 / 共17页
c++期末总复习-精华篇.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

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

2、变量1、 八进制正负号和 0 开头,例:012、-057十六进制正负号和 0x 或 0X 开头,例:0x34、-0X682、 字符常量(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 之

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

4、 1:t=54t=(54)54 为真,则结果为 1t 的值为1例 2: a=1j=0while(a=b)分析:先循环一次,由于条件为 i=j(i=bj)!=0(不是 a=b) ,则结果是无限循环3、 switch 语句不一定每个 case 后都有 break(跳出当前循环语句,而不是 if 语句) ,default 至多一个。例:switch (a )case 1:cout无限循环6、 补充1、 continue跳过剩余语句(继续循环,不会跳出)2、 const int a=5a 的值不会再变(即 a=6错误)3、 运算符优先级逻辑运算符(!错误)例:int a;double 错误3、 不能中

5、途换名例:int a,c;int 错误4、 数组引用:int a5=0;(a1=ea=”men”可以当作数组看(2) 可以连接:c=a+b c=”mankind”(3) 可以相互赋值:a=ba=”kind”注:(2)和(3) 都是 char 字符型数组所不能实现的例:char a5=”c+”,b6=”hello”;a=b;错误5、 其他类型1、 枚举类型:enum例:enum seasoon spring,summer,autumn,winter;season s=winters=3;分析:spring 相当于 0,后面逐次递增(可以对 spring 进行默认值设定,令 spring=1,后面

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

7、的内容赋给 s1)S=strcat(s1,s2)将 s1 与 s2 的内容进行连接,再给 S第三部分函数1、 认识函数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、 引

8、用传递:swap(int x 的值与函数结果有关swap(int x);swap 函数只是利用了 x 的值去运算,而未改变 x 本身的值2、 简单函数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、 系统函数例:sqrt(2)开方,fabs(-9) 绝对值,rand() 随机函数4、 函数重载功能相似(1)同名函数,但函数的参数类型、个数或者顺序不

9、同(2)函数的返回值类型不能作为函数重载的区分条件(3)不能把功能不同的函数放在一起重载3、 其他1、 int a 就相当于 auto int aauto 为自动变量,存放于动态存储区,可省略2、 extern外部变量 (属于全局变量),定义在函数体( 包括mian 函数 )之外全局寿命3、 static静态变量( 未初始化时,就默认为 0)有记忆功能(记住上一次运行结果)第四部分类与对象1、 类与对象的认识1、 c+通过类来实现封装2、 面向对象程序设计的三个特征:封装性、多态性和继承性3、 在类体内不能对数据成员进行初始化(因为没定义对象)例:Class Aprivate:int data

10、=2;错误2、 类成员1、 private(私有成员) 若开头省略,则默认为私有成员,只有该类的成员才能进行访问私有成员(派生类和对象都不能访问)2、 protected(保护成员) 允许派生类访问,不允许对象访问3、 public(共有成员)定义了类的外部接口,允许派生类访问,并可以被对象进行调用4、 成员函数类内声明 settime(int a=0,int b=0)类外定义void Clock:settime(int a=0,int b=0)3、 对象1、 对象所占据内存只用于存放数据成员(如 a、b 等),类中函数代码在内存中只占据一份空间2、 访问类型:Clock c,*time=de

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

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

13、造函数和析构函数之外的全部数据成员和函数成员派生类中也有和基类一样的函数3、 同名覆盖派生类中的新的同名函数覆盖基类的函数4、 继承方式基类中的成员将在派生类中有的访问权限例:Class B:protected AA 中的成员在派生类中的访问权限是 protected(故派生类的对象不能访问,派生类可以访问)注:A 中的 public 和 protected 在 B 中的访问权限都变成protected注 1:派生类的对象可以访问基类的 public注 2:即使基内的 private 在派生类不可访问却仍然存在注 3:private 属于”传递一代”,protected 可以”多代传递”2、

14、派生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 的构造函数2、 虚基类(1)消除多继承引起的二义性,消除数据冗余(2)

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

16、:public AA a;B b;a=b(对)b=a(错误)3、 判断是否可以访问类别 基本身 派生类 派生类的对象 基的私有成员 是 否 否基的保护成员 是 是 否基的公有成员 是 是 是第六部分多态性1、 编译时的多态:函数重载、运算符重载运行时的多态:虚函数2、 运算符重载:operator1、 成员函数 =、 () 、(这些只能为成员函数)例:加法类中声明:Complex operator+(Complex B b;则基类对象的指针在指向派生类时,只会指向派生类中的基类部分(谁定义你,你就只与谁有关)虚函数可以使基类中的函数”隐藏起来”,从而使指针指向派生类的同名函数2、 只有类的成员

17、函数才能是虚函数(构造函数不行,析构函数可以),非成员函数都不行,内联函数不行,静态函数不行3、 必须为 public 继承,由”基类对象的指针或引用 ”去掉用基函数,才能实现动态绑定4、 纯虚函数和抽象类1、 纯虚函数:virtual void hello(int x)=0;2、 一个类包含了纯虚函数,则为抽象类抽象类不能定义对象,只能为基类3、 派生类若没给出基类的纯虚函数的函数实现(即定义一个与纯虚函数同名的有实际作用的函数) 仍不能定义对象,还是一个抽象类(没有同名函数覆盖纯虚函数)4、 虚析构函数使派生类的析构函数先执行,再执行基类的析构函数否则可能有内存泄漏( 只执行了基类的析构函数)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报