c 程序设计复习资料.doc
《c 程序设计复习资料.doc》由会员分享,可在线阅读,更多相关《c 程序设计复习资料.doc(8页珍藏版)》请在沃文网上搜索。
1、C+程序设计课程代码 程序设计课程代码 4737一 数据类型 1保留字 32+29 个 2基本数据类型:wchar_t,bool 3非基本数据类型:class 4C+是强类型语言:要求在使用数据之前必须对数据的类型进行声明 5标识符的拼写方法:a)下划线连接法 b)骆驼表示法:第一个单词首字母小写,其后每个单词的首字母大写 c)匈牙利标记法:以类型简称为前缀,后跟骆驼表示法 6同义词:typedef 7实数默认为 double 型 8枚举类型:a)形式:enum 类型名 枚举常量列表;b)枚举常量为整型 c)枚举变量只能取枚举常量值,不能将整数值赋给枚举变量 9常量:a)形式:const 类型
2、 常量名 =初始化值;b)常量定义时必须初始化 c)常量名不能放在赋值语句的左边 d)初始化值可以是一个常量表达式,但表达式中不能含有函数 10I/O流控制 a)书写格式:输入 cin 变量 输出 cout 表达式 b)控制符:定义在 中,可直接插入流中 c)控制浮点数值显示:setprecision(n),默认为 6 位 二 表达式 1左值:能出现在赋值表达式左边的表达式,具有存放数据的空间,且存放是允许的 2赋值表达式具有值,是左值,其值为赋值符号左边的表达式的值 3算术类型隐式转换原则:总是朝表达数据能力更强的方向,并且总是逐个运算符进行 4强制类型转换:类型名(表达式)或 (类型名)表
3、达式 5自增自减,操作数必须是左值 a)前增/减,是左值 b)后增/减,不是左值 6C+中,表达式(无参函数除外)都产生值 7任何被转换的变量都不是左值 8当条件运算符后的两个表达式的值类型相同,且均为左值时,该条件表达式可做左值 9C 中条件表达式不可做左值 10不同的编译器的求值顺序可能不同,从而造成:a)交换律不再适用 b)使括号失去作用 c)副作用 三 函数 1递归的条件:a)必须有完成函数任务的语句 b)一个确定是否能避免递归调用的测试 c)一个递归调用语句 d)应先测试,后递归调用 2内联函数 a)目的:解决程序的运行效率 b)形式:inline 函数声明 c)必须先声明,后调用
4、d)内联函数中不能包含复杂的结构控制语句,不能是递归调用函数 e)其处理方式与宏定义类似 3重载函数 a)重载:在不同类型上作不同运算而又用同样的名字的函数 b)重载函数至少在参数个数、参数类型、参数顺序上有所不同 c)C+允许 int 到 long、double的转换 d)内部实现:采用名字粉碎方法来改变函数名 4默认参数的函数 a)默认参数在函数声明中提供 b)当既有声明,又有定义时,定义中不允许默认参数 c)默认参数在形参中应从右向左逐渐定义,调用时只能从右向左顺序匹配默认 d)默认参数可将一系列简单的重载函数合并成一个,当同时使用默认参数函数和重载函数时,注意不要引起二义性 e)默认值
5、可以是:全局变量、全局常量、函数 5外部存储类型 a)构成一个程序的多个源文件之间,通过声明数据或函数为外部的(extern)进行沟通 b)默认的函数声明或定义总是 extern c)带 extern 的变量说明是变量声明,不是变量定义 6静态存储类型 a)静态全局变量对组成该程序的其他源文件是无效的 b)静态函数只在所属源文件中可见 c)文件作用域下声明的 inline 函数默认为 static存储类型 d)文件作用域下声明的 const 常量默认为 static存储类型 7作用域 a)作用域:标识符在程序中有效的范围,作用域开始于标识符的声明处 b)局部作用域:起始于声明处 1块范围 2语
6、句范围,在 if/switch/for 的条件表达式中定义的标识符 c)函数作用域:标号是唯一有函数作用域的标识符,不受声明位置限制 d)函数原型作用域:函数形参,局限于括号内 e)文件作用域:在所有函数定义之外说明的,从说明点开始,一直延伸到源文件结束 8可见性 C+程序设计课程代码 程序设计课程代码 第 第 1 页 共 页 共 8 页 页 a)标识符的可见范围不超过作用域 b)如果被隐藏的是全局变量,可用符号:来引用给变量 9生命期 a)与存储区域密切相关 b)静态生命期:程序运行期 1具有文件作用域的变量 2无显示初始化时,自动初始化为 0 3函数具有静态生命期 c)局部生命期:函数调用
7、期,变量驻留在栈区,不自动初始化 d)动态生命期:变量驻留在堆中,开始于 new,结束于 delete 四 预编译 1头文件:源文件之间的接口,a)一般包含:类型声明 、函数声明、内联函数定义、常量定义、变量声明、枚举、包含指令、宏定义、注释 b)不宜包含:一般函数定义、变量定义、常量数组定义 五 数组 1数组定义 a)下标识数组元素到数组开始的偏移量 b)C+允许堆内存分配来建立数组 c)局部作用域的数组,其内容不确定 d)全局或静态作用域的数组,其内容初始全为 0 e)局部数组其大小受到栈空间的限制,对大数组一般定义为全局或静态类型 2访问数组 a数组不能彼此直接赋值 b必须按元素逐个赋值
8、 3初始化 a)C+规定:初始化数组的值的个数不能多于数组元素个数,不能通过跳过逗号的方式来省略 b)字符数组的初始化方式:char array10=“hello”;char array10=”hello”;char array10=h,e,l,l,o,0;c)编译时必须知道数组的大小,可省略数组的大小,由编译器统计初始值的元素个数 d)省略数组长度时,可用 sizeof()来获得数组的大小 e)省略数组大小只能在有初始化的数组定义中 六 指针 1在指针定义中,一个*只能表示一个指针 2*放在可执行语句中的指针前,称为间接引用操作符,放在指针定义中,称为指针定义符 3指针值不是整型数,将整型地
9、址赋给整型变量时要用强制类型转换 4指针在使用前要初始化 5访问堆 aC 语言方式,void*malloc(size_t size);需要显式类型转换 void free(void*);bC+方式 new/delete 不需要显式类型转换 6指向常量的指针 a在指针定义语句的类型前加 const,形式为:const int*pi;b该指针变量可赋给常量、变量的地址 c该指针变量的取值操作(*),不能用作左值,以防止对常量的赋值 7指针常量 a在指针定义语句的指针变量名前加 const,形式为:int*const pi;b该指针本身是常量,不能对其赋值,且定义时必须初始化 c该指针变量的取值操作
10、(*),能用作左值 d初始化时,不能初始化为一个常量的地址 8指向常量的指针常量 a形式为:const int*const cpc;bcpc 和 *cpc 都是常量,都不能用作左值 9指针函数 a返回指针的函数 b可以返回堆地址、全局变量的地址、静态变量的地址 c不能返回局部变量的地址 10Void 指针类型 a仅仅是一个指针 b不能进行指针运算,不能进行间接引用取值 c将其赋给其它类型指针时,必须有类型转换 11字符串 aC+中有两类字符串 字符数组:用双引号标识,用来给数组初始化的 字符串常量:用双引号标识,不是用来给数组初始化的 b字符串常量在代码中被转换为指向字符的地址(char*),
11、与字符数组名同类型 c字符串常量通常存放在内存的 data 区中的 const 区 d字符数组则根据其数据存储的特点存放在 data 区中的全局或静态区,或栈区 e两个同样字符组成的字符串常量的地址是不相等的,字符串的比较要采用库函数 f字符串常量、字符数组名、字符指针均属于同一种数据类型 g输出字符指针就是输出字符串,输出字符指针的间接引用就是输出单个字符 h对于字符串常量赋给字符指针的情形,一般指针不再重新赋值 I两个字符串常量的比较是地址的比较,两个数组名的比较也是地址的比较 J字符串的比较应该是逐个字符的比较,通常使用 strcmp()K字符数组的赋值采用 strcpy(),字符数组名
12、是指针常量(char*const)标准 C+库中提供了新的字符串类型:string,支持泛型运算 12指针数组 a指针数组名是二级指针 b传递数组给函数就是传递指针给函数,传递指针数组给函数就是传递二级C+程序设计课程代码 程序设计课程代码 第 第 2 页 共 页 共 8 页 页指针给函数 cNULL 是空指针值,不指向任何地方,是一个不确定值(因操作系统而定)d任何类型的指针都可以赋予 NULL 值 13命令行参数 amain 函数的原型:int main(int argc,char*argv,char*env)b参数的取名是任意的,可改成其他名称 c命令行参数中含有空格时,可将该参数用双引
13、号括起来 dexit(返回值),用于终止程序,返回到操作系统 14函数指针 a不同的参数,不同的返回类型,构成了不同的函数 b一个函数不能赋给一个不一致的函数指针 c函数指针和其他数据类型的指针之间不能互相赋值,即使显式转换也不行 d通过函数指针来调用函数,必须先给函数指针赋值(设有 int(*fp)())1 ANSI C+:fp()2 兼容 C:(*fp)()e用 typedef 来简化函数指针的定义,如:typedef int(*FUN)(int a,int b);七 引用 1基本概念 a引用是一个变量或对象的别名 b对引用的改动就是对目标对象的改动 c声明形式:目标类型&标识符 d引用不
14、是值,不占用存储空间,只有声明,没有定义 e引用在声明时必须初始化,且必须初始化指向一个实际存在的某类型对象 f&运算符的使用:(int&b=a;中操作符&表示 a 和 b 所代表的变量位于同一地址上)引用运算符:只在声明时使用,放在类型名之后 取址运算符:除作为引用符之外的任何情况 g引用一旦初始化,就绑定在该目标上,再也不分开 H对引用的赋值,是对其绑定的目标的赋值 I对引用取地址,是其绑定的目标的地址 2引用的使用方法 a可以有指针变量的引用 b不允许对 void 进行引用(void 只是语法上相当于一个类型,本质上不是类型)c不能建立对数组的引用 d没有引用的引用,也没有引用的指针 e
15、引用不能用类型来初始化 f不能给引用赋予 null 值 g对引用初始化为非左值(常量)时,要声明为 const 类型,此时引用的是系统隐含产生的临时变量(临时变量是 const 的)3用引用传递函数参数 a传递引用,就是传递引用所绑定的目标的地址(由编译器内部自动实现)b采用引用参数的目的:调用形式和传值方式形式相同,以隐藏函数的实现方式 函数内部采用传地址方式,具有与指针相同的效果 是编译系统为避免指针操作带来的不便所采用的一种技术手段 c采用引用参数,无法从函数调用的表面形式来判断函数的传值方式 4返回值问题 a利用引用参数可以更改其绑定的目标的特点,可以用来使函数返回多个值 b函数返回值
16、时,要生成一个值的副本(临时变量)。而用引用返回值时,不生成值的副本 cC+标准规定:临时变量(或对象)的生命期在一个完整的语句表达式结束后便宣告结束 d要以返回值初始化一个引用,应先创建一个变量保存该返回值,再以该变量初始化引用 e不要返回一个局部作用域范围内的变量(或对象)的引用 f返回引用的函数,可以使函数成为左值,从而进行运算 g保护实参不被修改的办法是传递 const 指针或引用 hC+规定,引用本身总是 const 的,对引用应用关键字 const,其作用只是使目标成为 const 变量 5堆变量的引用 a首先要测试 new 分配的堆内存是否成功,并保存到一个指针变量中,然后才能用
17、该指针指向的对象来初始化引用 b使用堆引用,应注意:1)必要时用值传递参数 2)必要时返回值 3)不要返回有可能退出作用域的引用 4)不要引用空目标 6引用小结 a引用是指针的扬弃 b引用的目的主要是用于在函数参数传递中,解决大对象的传递效率和空间都不如意的问题 c引用的最大特点是表达清晰 八 结构 1 概念 a 结构是用户自定义的新数据类型 b 通常情况下,结构声明在所有函数之外,位于 main()之外 c 声明一个结构不分配内存 d 声明形式:struct 结构名 成员定义列表;e 访问结构成员,结构变量 .成员 f 结构的大小固定,可以彼此直接赋值 g 两个不同结构名的变量是不允许相互赋
18、值的 h 在 C 中,定义结构变量时,结构类型名前必须有 struct,在 C+中可省略 2 结构指针 a 结构变量的地址是结构的第一个成员的地址 b 结构指针通过箭头操作符“-”访问结构成员 3 结构参数 a 按值传递时,整个结构值都将被复制到形参中去,常用于小结构情况 b 按引用传递,仅仅把结构地址传递给形参,而函数的实现和调用形式都与值传递相同,可读性较好,且效率较高,通常都是采用该方式传递结构参C+程序设计课程代码 程序设计课程代码 第 第 3 页 共 页 共 8 页 页数 九 类 1 类与结构 a)在 C 的结构中不允许含有成员函数 b)C+的类中,既可以包含数据成员,又可以包含成员
19、函数 c)C+中,结构是用 struct 声明的类,允许含有成员函数 d)C+中的类与结构的唯一区别是:类定义中默认情况下的成员是私有的,而结构定义中默认情况下的成员是公有的 2 定义成员函数 a)成员函数也称为方法,数据成员也称为属性 b)作用域区分符“:”,用于指明一个函数或数据属于哪一个类,若不跟类名,表示该数据是全局数据,函数为全局函数(非成员函数)c)在类中定义的成员函数默认为内联函数 d)在类定义外部定义成员函数时,成员函数名前要加上所属类名 3 调用成员函数 a)调用方式:点操作调用、指针调用、引用调用 b)成员函数必须用对象来调用 c)成员函数内部对其他成员函数和数据成员可直接
20、访问 d)一个类的所有对象调用的成员函数都是同一代码段 e)成员函数的形参列表中隐藏了一个参数 this指针,该参数接收对象的地址 f)成员函数内部对其他成员函数和数据成员的访问都隐含地被加上前缀this-g)不能在成员函数内部使用某个特定的对象 h)一个类对象所占据的内存空间由它的数据成员所占据的空间总和所决定,类的成员函数不占据对象的内存空间 4 类作用域:a)类作用域是指类定义和相应的成员函数定义范围 b)在类作用域范围内,一个类的成员函数对同一类的数据成员有无限制的访问权 c)一个类的所有成员位于这个类的作用域内,该类的任何成员都能访问同一类的任意其他成员 5 类的可见性 a)类名允许
21、与其他变量名或函数名相同 b)非类型名包括:变量名、常量名、函数名、对象名、枚举成员名等非数据类型名 c)如果一个非类型名与某类型名重名,则可通过给该类型名加前缀进行访问 6 局部类 a)在函数中定义的类称为局部类 b)局部类的作用域在定义该类的函数块中 c)局部类的成员函数必须在类定义内部定义 7 名空间 a)名空间是指某名字在其中必须唯一的作用域 b)C+规定:一个名字不能同时指两种类型 c)非类型名不能重名 d)类型名与非类型名不在同一名空间,类型名和非类型名可重名 e)类型名和非类型名重名时,类型名要加前缀 十 对象 1 类与对象 a)一个类描述一类事物,描述这些事物所应具有的属性 b
22、)一个对象是类的一个实例,它具有确定的属性值 c)对象是可以被创建和销毁的实体,类则是无所不在的抽象概念 2 构造函数 a)构造函数的任务:为对象分配空间和初始化数据成员 b)构造函数在建立对象时被自动调用 c)C+规定:与类同名的成员函数是构造函数 d)构造函数没有返回类型,函数体中不允许返回值,但可以有无值返回语句return;e)构造函数不能被随意调用 f)一个类定义中,类的数据成员可以为另一个类的对象,构造函数会根据在类中声明的对象成员的次序依次调用其构造函数,最后才执行它自己的构造函数 g)构造函数可以有参数,可以被重载 h)无参构造函数称为默认构造函数 i)显式调用构造函数会创建一
23、个无名对象 3 析构函数 a)析构函数的任务:做对象销毁前的清理工作 b)析构函数没有返回类型,没有参数,不允许被随意调用 c)析构函数不允许重载 d)析构函数在对象生命期结束时由系统自动调用 e)C+规定:析构函数名为在构造函数名前加“”f)析构函数以调用构造函数相反的顺序被调用 4 默认构造函数 a)C+规定:每个类必须有一个构造函数 b)如果没有提供构造函数,C+会提供一个隐含的默认构造函数,该默认构造函数是无参构造函数,仅负责创建对象,不做初始化工作 c)只要一个类定义了一个构造函数,C+就不再提供隐含的默认构造函数,对于默认构造函数只能由用户自己定义 d)在用默认构造函数创建对象时,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计复习资料 程序设计 复习资料