欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    c 程序设计复习资料.doc

    • 资源ID:1048423       资源大小:108KB        全文页数:8页
    • 资源格式: DOC        下载积分:10积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要10积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c 程序设计复习资料.doc

    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)在用默认构造函数创建对象时,

    24、对于全局对象或静态对象,对象全部初始化为 0。否则,对象值是随机的 5 类成员的构造 a)类的数据成员是类对象时,构造函数要采用以下形式来定义:构造函数(形参):类成员 1(参数),类成员 2(参数)b)类成员的参数可以是常量、构造函数的形参或省略 c)类成员的参数省略时,表示调用类成员的默认构造函数来初始化类成员,此时可在冒号后省略掉 d)类成员调用哪个构造函数由类成员的参数匹配来决定 e)常量类型和引用类型的数据成员的初始化必须放在冒号后面 f)对于数据成员是普通变量类型(非引用和常量类型)的情况,放在冒号后或放在函数体中初始化都可以 g)C+中,变量的初始化的形式有两种:C+程序设计课程

    25、代码 程序设计课程代码 第 第 4 页 共 页 共 8 页 页 形式一:变量名=值;形式二:变量名(值);h)构造函数的冒号后面的初始化只能采用形式二 6 对象的构造顺序 a)创建对象的唯一途径是调用构造函数 b)局部和静态对象,以声明的顺序构造 c)文件作用域的静态对象在主函数开始运行前全部构造完毕 d)块作用域中的静态对象在首次进入到定义该静态对象的函数时进行构造 e)静态对象只被构造一次 f)所有全局对象都在 main()之前被构造 g)由于编译器不能控制文件的连接顺序,所以不能决定不同文件中全局对象之间的构造顺序 h)建议不要从一个全局对象访问另一个全局对象 i)数据成员按其在类中声明

    26、的顺序构造,不按在冒号后出现的顺序构造 十一 拷贝构造函数 1 C+程序的内存格局:a)全局数据区(data):存放全局变量、静态数据、常量 b)代码区(code):存放函数代码 c)栈区(stack):存放为运行函数而分配的局部变量、参数、返回数据、返回地址等 d)堆区(heap):自由动态存储区 2 堆 a)C 中用 malloc()/free()在堆中动态分配和释放内存 b)C+中,采用 new/delete c)操作堆时,分配和释放必须匹配使用 d)调用 malloc()/free()时,不会自动调用构造函数和析构函数 e)类对象的建立是分配空间、构造结构和初始化的整体过程,统一由构造

    27、函数完成 3 分配堆对象 a)new 的格式 单个随机堆内存:new 数据类型 单个初始化堆内存:new 数据类型(初始值)堆数组:new 数据类型 元素个数 b)new 返回一个具有操作数之数据类型的指针 c)delete 的格式 单个堆内存:delete 由 new返回的指针 堆数组:delete 由 new返回的数组指针 d)用 new创建堆对象时,会自动调用构造函数 e)用 delete 销毁堆对象时,会自动调用析构函数 f)在堆上分配对象数组时,只能调用默认构造函数,因此只有定义了默认构造函数的类才能在堆上分配对象数组 4 拷贝构造函数 a)用处:用一个对象初始化一个新构造的对象 对

    28、象作为实参传递给函数形参(值传递)时 b)拷贝构造函数形式:类名(类引用参数);c)类定义中如果没有提供拷贝构造函数,则 C+将提供一个隐含的默认拷贝构造函数 d)默认拷贝构造函数的工作方法是逐个成员依次拷贝 e)浅拷贝:采用逐个成员依次原样复制的拷贝方法。默认拷贝构造函数是浅拷贝 f)深拷贝:非资源成员采用浅拷贝,资源成员重新申请的拷贝方法。需自定义拷贝构造函数 g)通常在析构函数中涉及到释放资源时,必须自定义拷贝构造函数实现深拷贝 5 临时对象 a)当函数返回一个对象时,会创建一个临时对象,用来存放返回的对象 b)临时对象仅在整个创建他们的外部表达式语句范围内有效,该语句执行完后,临时对象

    29、便被析构 c)含有返回对象的函数的表达式,会先后调用两次拷贝构造函数 6 无名对象 a)直接显式调用构造函数会产生一个无名对象 b)无名对象的用处:初始化引用 初始化一个新对象 作为实参传递给函数 7含有一个参数的构造函数,可用来从一种类型转换为另一种类型 十二 静态成员和友元 1 静态成员 a)使用原因:有些属性是类的所有对象所共有的,需要让该类的所有对象在该类的范围内能共享这些属性 b)静态成员用 static声明 c)静态成员包括静态数据成员和静态成员函数 d)在对象的内存空间中不包含静态数据成员 e)类声明中不允许对静态数据成员进行初始化,只含有静态数据成员的声明 f)静态数据成员和静

    30、态变量一样,在主函数 main()执行之前已经存在 g)为便于类的重用,建议静态数据成员的初始化应放在类的内部实现文件中进行 h)静态数据成员初始化时要用类名引导 i)静态成员与类相联系,不与对象相联系,访问静态成员时不需要对象,一般要加类名前缀 2 静态数据成员 a)静态数据成员和普通数据成员一样,其访问权限受到存储控制的影响 b)使用场合:1.用来保存流动变化的对象个数 2.作为一个状态标志 3.作为指向链表首尾成员的指针 3 静态成员函数 a)静态成员函数只认类型,不认对象 b)静态成员函数的定义中,不允许对非静态成员的默认访问 C+程序设计课程代码 程序设计课程代码 第 第 5 页 共

    31、 页 共 8 页 页c)静态成员函数中没有 this指针 4 友元函数 a)目的:使普通函数可以访问一个类的保护或私有数据成员,以提高效率 b)在类定义中声明,加关键字 friend c)友元函数是一个普通函数,不是成员函数,但可以访问友类的全部成员 d)友元函数的声明位置可以在类的任何部位,不受存取控制的限制 e)友元函数的定义通常和类成员函数定义在一起,不能定义为内联函数 f)一个类的成员函数可以是另一个类的友元 g)整个类可以是另一个类的友元 十三 继承 1 派生类的构造 a)派生类可以直接访问基类的保护成员 b)类与类(包括基类与子类)之间,以接口(成员函数)方式作沟通 c)派生类的构

    32、造顺序:基类、对象成员、自身 2 虚函数 a)允许子类的成员函数重载基类的成员函数 b)滞后联编:在运行时,能依据实际对象的类型确定调用哪个重载函数的能力,又称多态性 c)先期联编:编译时就能确定(按变量的定义类型确定)那个重载函数被调用 d)编译时通常是在先期联编状态下工作的,只有看到虚函数时才把它作为迟后联编来处理 e)若语言不支持多态,但支持类,则称其为基于对象的语言,不是面向对象的语言 f)在成员函数前加 virtual,使其成为虚函数,具有多态性 g)基类中声明为虚函数的成员函数,自动传递到子类,使子类中的重载函数自动成为虚函数(virtual 可以省略)h)若虚函数在子类和基类中出

    33、现的仅仅是名字相同,而参数类型或返回类型不同,则即使写上 virtual,也不是虚函数 i)建议一个类中将所有的成员函数都尽可能设置为虚函数 j)只有类的成员函数才能说明为虚函数 k)静态成员函数不能说明为虚函数 l)内联函数不能是虚函数 m)虚函数都是非内联的,即使定义在类的内部 n)构造函数不能是虚函数 o)析构函数通常声明为虚函数 3 抽象类 a)只能用于继承,不能用来声明一个实例对象的类,称为抽象类 b)一个抽象类至少有一个纯虚函数 c)纯虚函数:virtual 返回类型 函数名(参数)=0;d)子类若没有对基类的所有纯虚函数进行重载,则该子类仍为抽象类 e)不能创建一个抽象类的对象,

    34、但可以声明一个抽象类的指针或引用 十四 多重继承 1 基类子对象的处理 a)非虚拟继承的,原样复制 b)虚拟继承的,只复制一份 2 构造顺序 a)按被继承的声明顺序构造基类子对象(先虚基类,后非虚基类)b)按类成员的声明顺序构造类成员 c)最后调用类自身的构造函数 d)派生类的构造函数必须激活所有基类的构造函数,并把相应的参数传递给它们 3 访问控制 a)公有权限:内外,子类都可访问 b)保护权限:对内不对外,子类可访问 c)私有权限:对内不对外,子类不可访问 4 继承的访问控制:a)默认的继承类型是私有继承 b)对基类的访问权限由基类的访问控制和继承类型综合决定 5 一个私有的或保护的派生类

    35、不是子类,不能做基类能做的所有事情 6 公有继承又称类型继承,私有继承又称实现继承 十五 运算符重载 1 概述 a)运算符是系统内部定义的,具有特定语法规则 b)重载运算符时,要注意该重载运算符的运算顺序和优先级不能变 c)运算符是函数,参数和返回类型可以重新说明 d)重载形式:返回类型 operator 运算符(参数说明)e)参数说明部分,不能都是内部类型,至少有一个是用户自定义类型,且通常为引用型 f)不能创造新的运算符 g)“.”,“:”,“.*”,“.-”,“?:”不能重载 h)“=”,“()”,“”,“-”必须以成员函数的形式重载 2 参数和返回类型 a)参数个数 作为非成员函数时(

    36、通常为友元)1.单目运算符,有一个参数 2.双目运算符,有两个参数 作为成员函数时(隐含了 this 作为第一个参数)3.单目运算符,无参数 4.双目运算符,有一个参数 b)返回类型 单目运算符,引用返回 双目运算符,值返回 3 重载的个数 a)参数全都是用户自定义类型时,只需重载一次。将该运算符放在操作对象的前或后时,都是调用该重载函数 b)参数中含有基本数据类型时(双目运算),有两种方法:分别定义前后两个重载运算符函数,其中一个定义为调用另一个的内联函数 先定义含有该基本数据类型参数的构造函数,然后定义全是类类型参C+程序设计课程代码 程序设计课程代码 第 第 6 页 共 页 共 8 页

    37、页数的重载运算符函数 4 重载增量运算符(+)a)前增量,参数与返回的是同一个对象,采用引用返回 b)后增量,返回的是存放实参对象值的临时对象,采用值返回 c)C+约定:在增量运算符的定义中,放上一个 int 形参,就是后增量运算符 d)后增量运算符定义中的 int 形参,只是起到区分前后增量的标志作用,在定义头中可以省略形参名 5 转换运算符 a)声明形式:operator 类型名()b)作用:将对象转换成类型名规定的类型 c)强制转换只能对基本数据类型进行操作 d)转换运算符重载函数与类型转换构造函数是互逆函数 e)要避免转换构造函数和转换运算符重载函数的同向二义性 f)通常定义为成员函数

    38、 6 表达式中运算符的匹配顺序 a)寻找作为成员函数的重载运算符 b)寻找作为非成员函数的重载运算符 c)寻找系统定义的运算符 d)寻找操作数的类型转换重载运算符 e)寻找操作数的类型的系统内部定义 7 赋值运算符 a)C/C+规定:只要是用户定义的类型,都应能进行赋值运算。b)数组是集合,不是类型 c)对任何类,C+系统提供默认的赋值运算符重载函数 d)拷贝构造函数是对还未生成的对象进行初始化,赋值运算是对已存在对象进行拷贝复制操作 e)通常定义为成员函数,采用引用返回 f)通常是在浅拷贝不合适时,才重载 g)通常函数体包括两部分:首先取消对象以占用的资源(相当于析构函数)然后分配新资源,并

    39、赋值(相当于拷贝构造函数)h)若将赋值运算符说明为非公有的,则可将赋值操作限定在类作用域范围内,防止应用程序中使用赋值操作 十六 I/O 流 1 标准设备对应关系:a)标准输入 cin stdin 键盘 b)标准输出 cout stdout 屏幕 c)标准错误 cerr stderr 屏幕 d)打印输出 clog stdprn 打印机 2 标准 I/O流原理 a)头文件:iostream.h b)实现:cin,cout,cerr,clog 均是系统全局对象 i.ostream cout(stdout);ii.istream cin(stdin);c)对应每个基本数据类型都有友元运算符重载函数

    40、d)写到 cerr 对象上的信息不能重定向,只能显示到屏幕上 3 文件流类 a)头文件:fstream.h,对应设备是文件 b)类层次:ofstream/ifstream-fstream 4 串流类 a)头文件:strstrea.h,对应设备是字符串缓冲区 b)ostrstream/istrstream-strstream 5 流控制符 a)使用流对象的成员函数 b)使用控制符,定义在中 c)对应关系 i.十进制 flags(10)dec ii.十六进制 flags(16)hex iii.八进制 flags(8)oct iv.填充字符 flags(c)setfill(c)v.有效位数 prec

    41、ision(n)setprecision(n)vi.域宽度 width(n)setw(n)6 使用 I/O成员函数 a)读取输入行 cin:getline()b)读取一个字符 cin:get()c)输出一个字符 cout:put()7 重载插入运算符()a)形式:ostream&operator (ostream&输出对象,用户类&用户类对象)b)不能作为类成员函数 8 继承基类的运算 a)先定义一个抽象基类 b)在抽象基类中声明一个纯虚函数(用于显示类成员信息),形式为:virtual void display(ostream&out)=0;c)派生子类中,具体实现 display()d)定

    42、义重载插入运算符函数,形式为:e)ostream&operator (ostream&oo,基类&类对象);f)重载插入运算符函数中调用:类对象.display()十七 模板 1 概述 a)作用:可使程序对任何其他数据类型进行同样方式的处理 b)C+程序由类和函数组成 c)模板可分为类模板、函数模板 d)函数模板的声明形式:template 返回类型 函数名(形式参数表)函数定义体;e)类型形式参数表中,若为类类型,必须加前缀 class f)函数模板只是对函数的描述,不是实际的函数。在函数调用时,系统会根据实参类型按模板生成一个重载函数,该函数称为模板函数 g)类模板的声明形式:templa

    43、te class 类模板名 类声明体;C+程序设计课程代码 程序设计课程代码 第 第 7 页 共 页 共 8 页 页h)类模板中成员函数的定义形式:template 返回类型 类模板名 :成员函数名 (形式参数表)函数定义体;i)类模板是模板的定义,定义中使用通用类型参数,只能用于生成类 j)模板类的实例化形式:类模板名称 模板类名;2 使用模板的时机:a)函数功能相同,形式参数类型不同 b)类描述相同,类成员采用的类型不同 3 使用函数模板,实际是由系统代替用户来生成重载函数 4 使用类模板,实际是由系统代替用户来生成类的定义 5 可以定义模板函数的重载函数,编译系统匹配函数的顺序是:重载函

    44、数、模板函数 6 类模板的使用方法:a)加入模板类的头文件 b)创建模板类实例,形式为:类模板名称 模板类对象名称;如:List float_list;c)对模板类对象(float_list)的使用和普通对象相同,在调用成员函数时,所赋的实参类型要和“实际类型名称”一致 7 模板的定义(包括成员函数定义)一般放在头文件中 十八 异常处理 1 程序的错误:a)语法错误:可在编译时发现 b)运行时错误:i.不可预料的逻辑错误,可通过编写专门的错误处理代码来修正 ii.可预料的运行异常,由系统运行环境造成的不可避免的错误,通常加入一些预防代码加以防止 2 异常的不同含义 a)一种程序定义的错误 b)

    45、对所能预料的运行错误进行处理的一套实现机制 c)C+中,是指从发生问题的代码区域传递到处理问题的代码区域的一个对象 3 异常的实现 a)定义异常(try),限定可能出现异常的程序范围 b)抛出异常(throw),抛出检测到的异常对象 c)捕获异常(catch),对传递过来的异常进行处理 4 Try 语句块;a)作用:表示块中的语句可能会发生异常 b)C+只处理 try块中的产生的异常 c)Try块之后必须紧跟若干个 catch语句 d)当未发生异常时,则不会执行所有的 catch()语句,会从 catch()之后继续执行 e)抛掷异常 throw和捕获异常 catch 可以放在不同的函数中 5

    46、 Catch(形参)异常处理程序块;a)Catch 语句必须立即出现在 try 之后,不能在前 b)捕获是利用数据类型匹配实现的 c)Catch()括号中的声明只能容纳一个形参,形参名可以省略 d)若未找到匹配的 catch 语句时,系统调用默认异常处理函数 abort()终止程序 e)抛出异常 throw 和异常处理 catch 之间,按数据类型严格匹配,不允许类型转换 f)catch 语句执行完毕,则执行跟随最后一个 catch()的程序块 6 异常的传递捕获机制 a)首先匹配同级 catch b)同级不匹配时,向上层函数传递进行匹配 7 异常的组织方法 a)可以把多个相关异常组成族系 b

    47、)异常族系分为 i.异常枚举族系 ii.异常派生层次族系 c)异常枚举族系结构 i.先定义异常枚举类型 enum 异常枚举 异常值;ii.throw 异常值;iii.catch(异常枚举参数)switch()d)异常派生层次结构 i.定义异常基类 class BaseError;ii.定义异常派生类:class ChildError:public BaseError;iii.throw ChildError;iv.catch(ChildError)e)类层次捕获匹配规则:i.catch(基类)可以捕获派生类异常 ii.catch(基类指针)可以捕获派生类异常指针 iii.以上两种 catch(),总是放在 catch(派生类)的后面 C+程序设计课程代码 程序设计课程代码 第 第 8 页 共 页 共 8 页 页


    注意事项

    本文(c 程序设计复习资料.doc)为本站会员(星星)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922