版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一部分简单的程序设计、标识符(包括变量名命名规则)1、定义:由数字、大小写字母和下划线组成 2、例子:)、 _ab、a+b (不能有+)合法: Int (大小写不一样,不是关键字 int不合法:new和friend (不能与关键字相同)2b (开头不能是数字)、基本数据类型存储空间位数存储形式double64补码int32补码float32补码charASCII 码特殊:指针 *p固定为long int 类型)string16(固定大小)注 1 :精度低 自动转换 精度高注 2:int a;a=8/3 a=2(int 整型 )三、常量与变量1、八进制 正负号和 0开头,例: 012、-057
2、十六进制 正负号和 0x 或 0X 开头,例: 0x34、 -0X68 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、一个字节)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=6int i=5,c;c=+i;c=6;i=62、赋值运算符1)区分“ =”和“ =”3、关系运算符和逻辑运算符1)结果总为 1或 0例 1:t=54 t=(54) 54为真,则结果为 1t 的值为 1
4、例 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 语句),default 至多一个。例: switch (a)case 1:cout A;break;case
5、 2:cout Bcase 3:cout C;break;若输入a=2,则输出的结果为BC程序从第二个开始执行,因为没有break跳出当前程序, 会继续执行下面的程序 , 直到 break 跳出等。4、for 循环:注意是否会无限循环(循环条件的正确性)例: 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,所
6、以答案为3第二部分构造数据类型、数组1、数组下标只能是常量( an 、a 不合法) 2、int a2020 数组未初始化,则元素的值不确定(除了静态数组未初始化时,默认是 0)int a2020=0元素全部为 0,且每个元素都必须是 int 型的 注:a(5) a=5,上述数组最后一个元素为 a19193、部分初始化: a5=1,2,3a5=1,2,3,0,0、指针1 、 * 取内容, & 取地址或 p=a)int a5=0 , *p , p=&a0(取出 a 中的首地址 ( 即 a0) 放在 p 中,则 p 中所存内容就是 a0 的首地址 (*p 即读取 p 中地址的内容 就是 a0)(1)
7、 coutp 本身的首地址coutvv&p 取 p中所存的地址,再输出一a的首地址 cout取 P所存首地址的内容一 输出a0 (4)cout指针往后移动一位 输出 a1注: *(p+) *(p+1)2、动态内存分配(1) int *p=new floatN 一维数组(这里 N 为变量) 二维数组rv和r )共用内存int (*p)4=new float34最后 delete p三、引用1、int r,&rv=r 别名与目标名(即2、类型必须一致,必须立即初始化(int &rv; 错误)例:int a;double &b=a; 错误3、不能中途换名例: int a,c;int &b=a,&c=
8、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注:char a5= ” 12345”一 错误(必须有一个位置放0 )2、String(1)string a= ” man” ,b=” kind ” ;a1= ea=” men” 可以当作数组看(2)(3)
9、可以相互赋值: a=ba=” kind ”可以连接: c=a+b c=” mankind”注: (2) 和(3) 都是 char 字符型数组所不能实现的 例: char a5= ” c+” ,b6= ” hello ” ;a=b; 错误 五、其他类型1 、枚举类型: enum例: enum seasoon spring,summer,autumn,winter;season s=winter s=3;分析: spring 相当于 0,后面逐次递增 ( 可以对 spring 进行默认值设定,令 spring=1 ,后 面依次递增 ) 2、结构体: struct 类比 类与对象3、共用体: uni
10、on注:若干个成员中,其中占用内存最大的,作为共用体类型的大小(不是相加)例:union aint x;char s; 显然占4个字节(int), 而不是char的1个字节 六、补充1、char name20 coutname 输出为字符数组的内容int n ame20 cout 输出首地址2、char *p= ”hello ”( 类比数组 )(1) couth(2) couthellocoutvv p+1 ello 指针向后移动一位,指向e,再输出后面的内容 3、strcmp(s1,s2) 进行大小比较Strcpy(s1,s2) s1=s2(将 s2 的内容赋给 s1)S=strcat(s1
11、,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、引用传递: swap(int
12、&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、系统函数例: sqrt(2) 开方, fabs(-9) 绝对值, rand() 随机函数4、函数重载功能相似 (1) 同名函数,但函数的参数类型、个数或者顺序不同(
13、2) 函数的返回值类型不能作为函数重载的区分条件(3) 不能把功能不同的函数放在一起重载 三、其他1 、 int a 就相当于 auto int a auto 为自动变量,存放于动态存储区,可省略2、extern 外部变量 (属于全局变量 ) ,定义在函数体 (包括 mian 函数) 之外 全局寿命 3、static 静态变量 ( 未初始化时,就默认为 0) 有记忆功能 ( 记住上一次运行结果 )第四部分类与对象、类与对象的认识1、C+通过类来实现封装 2、面向对象程序设计的三个特征: 封装性、多态性 和继承性3、在类体内不能对数据成员进行初始化 ( 因为没定义对象 )例: Class Apr
14、ivate:int data=2;错误、类成员1、private( 私有成员) 若开头省略,则默认为私有成员, 只有该类的成员才能进行访问 私有成员 ( 派生类和对象都不能访问 ) 2、protected( 保护成员 ) 允许派生类访问 , 不允许对象访问 类外定义 void Clock :3、public( 共有成员 ) 定义了类的外部接口,允许派生类访问,并可以被对象进行调用4、成员函数类内声明 settime(int a=0,int b=0) settime(int a=0,int b=0)三、对象1、对象所占据内存只用于存放数据成员 (如 a、b 等) ,类中函数代码在内存中只占据一份
15、 空间2、访问类型: Clock c,*time=&c ,则有 c.showtime()或 (*time).showtime 或 time-showtime()四、构造函数与析构函数1、构造函数 对象的初始化 (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
16、&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、一般情况下,调用几次
17、构造函数,结束时就相反顺序调用几次析构函数六、友元: friend 1、实现不同类之间的数据共享,但破坏了类的封装性和隐蔽性2、友元函数 不属于类的成员函数,可以访问类的所有成员 ( 包括私有成员 )3、友元类:如 Class A.friend Class B;. 意味着B类是A类的友元类一B类的所有成员函数都可以访问A类的所有成员4、友元关系不能传递且是单向的(A是B的友元函数,但B不是A的友元函数),友元关系不会被继承七、其他1、this 指针:存在于类的成员函数中,用于区分数据成员( 除静态数据成员外 )2、静态成员: static(1) 不属于某个对象,属于整个类 (只能通过类名进行访
18、问(2) 类外初始化,同样具有”记忆功能”3、const 可用于对函数重载的区分4、类别对象是否可以访问 派生类是否可以访问privateprotectedpublic5、类别可以重载或内联数量是否可以有形参 构造函数一或多析构函数注:均无返回类型 (如 int 、double), 析构函数可以是虚函数 第五部分继承与派生、继承1、若省略继承方式,则默认为私有继承例: Class A:B Class A:private B 2、派生类继承了基类除去 构造函数 和析构函数 之外的全部数据成员和函数成员 派生类中也有和基类一样的函数3、同名覆盖 派生类中的新的同名函数覆盖基类的函数 4、继承方式
19、基类中的成员将在派生类中有的访问权限例:Class B:protected A A中的成员在派生类中的访问权限是protected(故派生类的对象不能访问 , 派生类可以访问 )注:A中的public 和Protected 在B中的访问权限都变成 protected注 1:派生类的对象可以访问基类的 public注 2:即使基内的 private 在派生类不可访问却仍然存在注 3: private 属于”传递一代” ,protected 可以”多代传递”、派生1、派生类的构造函数和析构函数 (1) 例: Clock(int a,char b):Point(b)注:派生类构造函数既要初始化派生类
20、新增的成员,也要为他的基类的构造函数传递数据 引用了基类的构造函数(2) 派生类定义对象时,构造函数调用顺序:先基类 内嵌对象 最后派生类例: Class B:public Apiblic:A a; 故先调用两次 A 的构造函数,在调用 B 的构造函数一次 析构函数则反向执行注:若为多继承 Class C:public A,protected B 则顺序执行A的构造函数,再是 B的构造函数,最后是C的构造函数2、虚基类 (1) 消除多继承引起的二义性,消除数据冗余(2) 通过虚基类继承, 最后建立对象的类 ( 称之为最远派生类 ) ,才调用虚基函数的构造函数 保证对虚基类的对象只初始化一次 三
21、、其他1、若基类的构造函数有默认值,则派生类就不必给基类传递数据而不必写成例: Class AA(int x=1);Class BB(int y=1)Class BB(int y,int x):A(x) 2、积累与派生类的赋值兼容(1) 派生类的对象可以赋值给基类对象就是派生类将基类的那部分赋值给基类反之不行(2) 同一基类的不同派生类对象不能相互赋值 ( 只是交集,不是包含关系 )总结:派生类可以对基类进行操作 即(基类)=( 派生类)的操作是对的,反之都是错的例: Class A Class B:public AA a;B b;a=b(对)一b=a(错误)3、判断是否可以访问类别基本身派生
22、类派生类的对象是否否基的保护成员是是否基的公有成员是是是基的私有成员第六部分多态性、编译时的多态:函数重载、运算符重载运行时的多态:虚函数二、运算符重载: operator1、成员函数 =、 、()、(这些只能为成员函数 )例:加法 类中声明 :Complex operator+(Complex &c) 类外定义: Complex:Complex operator+(Complex &c) 函数的实现: c3=c1+c2注:成员函数隐藏一个 this 指针, 故参数比非成员函数少一个2、非成员函数: friend 函数返回值类型 operator 运算符 ( 形参表 )例: friend Complex operator+(Complex &c1,Complex &c2)注:”和”只改变功能(4)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度家居建材加盟分销合同范本3篇
- 二零二五年度仓储合同:瓶装水储存保管协议2篇
- 2025年度敬老院老年人生活照料与生活助理服务合同3篇
- 二零二五年度建筑工程监理补充协议范本(绿色施工标准)3篇
- 2025年度教育设备运输及校园设施建设合同3篇
- 二零二五年度房地产项目环境影响评价与治理合同3篇
- 虚幻制片高级课程设计
- 2025年度知识产权保护委托担保协议合同范本3篇
- 二零二五年度应急救援项目投标担保委托保证合同3篇
- 添加文字课程设计
- DB11∕501-2017 大气污染物综合排放标准
- 四川省住宅设计标准
- YB-T6115-2023《焦炉煤气脱硫废液干法制酸技术规范》
- 原子物理学全本课件(褚圣麟第一至第十章全部课件)
- Q-GDW 738-2012 配电网规划设计技术导则及编制说明
- 经编结构与编织原理课件
- 2023年矿井应急救援理论考试试题及答案
- 2024年全国版图知识竞赛(小学组)考试题库大全(含答案)
- 腹腔镜手术设备、工作原理与操作应用
- 中集集团招聘题库
- 大学生国家安全教育意义
评论
0/150
提交评论