ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:23.57KB ,
资源ID:25070244      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25070244.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(全国计算机二级C考试复习知识点汇总.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

全国计算机二级C考试复习知识点汇总.docx

1、全国计算机二级C考试复习知识点汇总精心整理2017年全国计算机二级C+考试复习知识点汇总一、C+ 既述(1)发展历史1980年,BjarneStroustrup 博士开始着手创建一种模拟语言,能够具有面向对象的程序设计 特色。在当时,面向对象编程还是一个比较新的理念, Stroustrup博士并不是从头开始设计新语言,而是在C语言的基础上进行创建。这就是 C+语言。1985年,C+开始在外面慢慢流行。经过多年的发展, C+已经有了多个版本。为次,ANSI和ISO的联合委员会于1989年着手为C+制定标准。1994年2月,该委员会出版了第一份非正式草 案,1998年正式推出了 C+的国际标准。(

2、2)C 和 C+C+是 C的超集,也可以说C是C+的子集,因为C先出现。按常理说,C+编译器能够编译任 何C程序,但是C和C+还是有一些小差别。例如C+增加了 C不具有的关键字。这些关键字能作为函数和变量的标识符在 C程序中使用,尽管C+包含了所有的C,但显然没有任何C+H编译器能编译这样的C程序。C程序员可以省略函数原型,而 C+不可以,一个不带参数的 C函数原型必须把void写出来。 而C+可以使用空参数列表。C+中 new和delete是对内存分配的运算符,取代了 C中的malloc和free。标准C+中的字符串类取代了 C标准C函数库头文件中的字符数组处理函数。C+中用来做控制态输入输

3、出的iostream类库替代了标准C中的stdio函数库。C+中的try/catch/throw 异常处理机制取代了标准 C中的setjmp()和Iongjmp()函数。二、关键字和变量C+h相对与C增加了一些关键字,如下:type nameboold yn amic_castmutable namespacestatic_castusi ngcatchexplicit newvirtualoperatorfalseprivatetemplatevolatilec on stprotectedthiswchar_tcon st_castpublicthrowfrie ndtruerei nte

4、rpret_casttry精心整理bitorxor_ea nd_eqcomplor_eqno t_eqbita nd在C+中还增加了 bool型变量和wchar_t型变量:布尔型变量是有两种逻辑状态的变量, 它包含两个值:真和假。如果在表达式中使用了布尔型变量,那么将根据变量值的真假而赋予整型值 1或0。要把一个整型变量转换成布尔型变量,如果整型值为0,则其布尔型值为假;反之如果整型值为非0,则其布尔型值为真。布儿型变量在运行时 通常用做标志,比如进行逻辑测试以改变程序流程。#i ncludeiostream.hin tmai n()boolflag;flag=true;if(flag)cou

5、tretur n0;C+中还包括wchar_t数据类型,wchar_t也是字符类型,但是是那些宽度超过 8位的数据类 型。许多外文字符集所含的数目超过 256个,char字符类型无法完全囊括。wchar_t数据类型一般 为16位。标准C+啲iostream类库中包括了可以支持宽字符的类和对象。用 wout替代cout即可。#i ncludeiostream.hin tmai n()wchar_twc;wc=b;woutwc=y;woutwc=e;woutreturn0;说明一下:某些编译器无法编译该程序(不支持该数据类型)。三、强制类型转换精心整理有时候,根据表达式的需要,某个数据需要被当成另

6、外的数据类型来处理,这时, 就需要强制 编译器把变量或常数由声明时的类型转换成需要的类型。 为此,就要使用强制类型转换说明,格式如下:in t*iptr=(i nt*)&table;表达式的前缀(int*)就是传统C风格的强制类型转换说明(typecast),又可称为强制转换说明 (cast) o强制转换说明告诉编译器把表达式转换成指定的类型。 有些情况下强制转换是禁用的,例如不能把一个结构类型转换成其他任何类型。数字类型和数字类型、指针和指针之间可以相互转换。 当然,数字类型和指针类型也可以相互转换, 但通常认为这样做是不安全而且也是没必要的。 强制类型转换可以避免编译器的警告。Ion gi

7、 ntel=123;shorti=(i nt)el;floatm=34.56;in ti=(i nt)m;上面两个都是C风格的强制类型转换,C+还增加了一种转换方式,比较一下上面和下面这个 书写方式的不同:Ion gi ntel=123;shorti=i nt(el);floatm=34.56;in ti=i nt(m);使用强制类型转换的最大好处就是: 禁止编译器对你故意去做的事发出警告。 但是,利用强制 类型转换说明使得编译器的类型检查机制失效, 这不是明智的选择。通常,是不提倡进行强制类型 转换的。除非不可避免,如要调用 malloc()函数时要用的void型指针转换成指定类型指针。四、

8、标准输入输出流在C语言中,输入输出是使用语句scanf()和printf() 来实现的,而C+中是使用类来实现的。#i ncludeiostream.hmain()/C+中main()函数默认为int型,而C语言中默认为void型。in ta;couta;/*输入一个数值*/coutretur nO;精心整理cin,cout,endl 对象,他们本身并不是C+语言的组成部分。虽然他们已经是 ANSI标准C+冲被定义,但是他们不是语言的内在组成部分。在 C+中不提供内在的输入输出运算符,这与其他语言是不同的。输入和输出是通过 C+类来实现的,cin和cout是这些类的实例,他们是在 C+语言 的

9、外部实现。在C+语言中,有了一种新的注释方法,就是 / ,在该行/后的所有说明都被编译器认为 是注释,这种注释不能换行。C+中仍然保留了传统C语言的注释风格/*/。C+也可采用格式化输出的方法:#i ncludeiostream.hin tmai n()in ta;cout a;cout类的设计、构造函数和析构函数一、类的设计1.类的声明class类名private:/ 私有public:/ 公有;2.类的成员一般在C+啖中,所有定义的变量和函数都是类的成员。如果是变量,我们就叫它数据成员如 果是函数,我们就叫它成员函数。精心整理3.类成员的可见性private和public访问控制符决定了成

10、员的可见性。由一个访问控制符设定的可访问状态将 一直持续到下一个访问控制符出现,或者类声明的结束。私有成员仅能被同一个类中的成员函数访 问,公有成员既可以被同一类中的成员函数访问, 也可以被其他已经实例化的类中函数访问。 当然,这也有例外的情况,这是以后要讨论的友元函数。类中默认的数据类型是private ,结构中的默认类型是public 。一般情况下,变量都作为私有 成员出现,函数都作为公有成员出现。类中还有一种访问控制符protected,叫保护成员,以后再说明。4.初始化在声明一个类的对象时,可以用圆括号()包含一个初始化表。看下面一个例子:#i ncludeiostream.hclas

11、sBoxprivate:in theight,width,depth;/3 个私有数据成员public:Box(i nt,i nt,i nt);Box();in tvolume(); 成员函数;Box:Box(i ntht,i ntwd,i ntdp)height=ht;width=wd;depth=dp;精心整理Box:Box()/nothingin tBox:volume()retur nheight*width*depth;in tmai n()Boxthisbox(3,4,5); 声明一个类对象并初始化coutvretur nO;当一个类中没有private成员和protected成员

12、时,也没有虚函数,并且不是从其他类中派生 出来的,可以用来初始化。(以后再讲解)5.内联函数内联函数和普通函数的区别是:内联函数是在编译过程中展开的。通常内联函数必须简短。定 义类的内联函数有两种方法:一种和 C语言一样,在定义函数时使用关键字inline。如:in li nein tBox:volume()retur nheight*width*depth;还有一种方法就是直接在类声明的内部定义函数体, 而不是仅仅给出一个函数原型。我们把上面的函数简化一下:精心整理#i ncludeiostream.hclassBoxprivate:in theight,width,depth;public

13、:Box(i ntht, in twd,i ntdp)height=ht;width=wd;depth=dp;Box();in tvolume()retur nheight*width*depth;in tmai n()Boxthisbox(3,4,5); 声明一个类对象并初始化coutretur nO;这样,两个函数都默认为内联函数了。精心整理二、构造函数什么是构造函数?通俗的讲,在类中,函数名和类名相同的函数称为构造函数。上面的 Box()函数就是构造函数。C+允许同名函数,也就允许在一个类中有多个构造函数。如果一个都没有, 编译器将为该类产生一个默认的构造函数,这个构造函数可能会完成一些

14、工作,也可能什么都不做。绝对不能指定构造函数的类型,即使是 void型都不可以。实际上构造函数默认为 void型。当一个类的对象进入作用域时,系统会为其数据成员分配足够的内存, 但是系统不一定将其初始化。和内部数据类型对象一样,外部对象的数据成员总是初始化为 0。局部对象不会被初始化。构造函数就是被用来进行初始化工作的。 当自动类型的类对象离开其作用域时, 所站用的内存将释放回系统。看上面的例子,构造函数Box()函数接受三个整型擦黑素,并把他们赋值给立方体对象的数据 成员。如果构造函数没有参数,那么声明对象时也不需要括号。1.使用默认参数的构造函数当在声明类对象时,如果没有指定参数,则使用默

15、认参数来初始化对象。#i ncludeiostream.hclassBoxprivate:in theight,width,depth;public:Box(i ntht=2,i ntwd=3,i ntdp=4)height=ht;width=wd;depth=dp;Box();精心整理in tvolume()retur nheight*width*depth;;in tmai n()Boxthisbox(3,4,5); 初始化Boxdefaulbox;/ 使用默认参数coutcoutreturn。;2.默认构造函数没有参数或者参数都是默认值的构造函数称为默认构造函数。 如果你不提供构造函数,

16、编译器会自动产生一个公共的默认构造函数, 这个构造函数什么都不做。如果至少提供一个构造函数,则 编译器就不会产生默认构造函数。3.重载构造函数一个类中可以有多个构造函数。这些构造函数必须具有不同的参数表。在一个类中需要接受不 同初始化值时,就需要编写多个构造函数,但有时候只需要一个不带初始值的空的 Box对象。#i ncludeiostream.hclassBoxprivate:in theight,width,depth;public:精心整理Box()/nothi ngBox(i ntht=2,i ntwd=3,i ntdp=4)height=ht;width=wd;depth=dp;Bo

17、x();in tvolume()retur nheight*width*depth;in tmai n()Boxthisbox(3,4,5); 初始化Boxotherbox;otherbox=thisbox;coutvretur nO;这两个构造函数一个没有初始化值,一个有。当没有初始化值时,程序使用默认值,即 2, 3,4。但是这样的程序是不好的。它允许使用初始化过的和没有初始化过的 Box对象,但它没有考虑当thisbox给otherbox赋值失败后,volume()该返回什么。较好的方法是,没有参数表的构造函 数也把默认值赋值给对象。精心整理classBoxin theight,widt

18、h,depth;public:Box()height=O;width=O;depth=O;Box(i ntht, in twd,i ntdp)height=ht;width=wd;depth=dp;in tvolume()retur nheight*width*depth;这还不是最好的方法,更好的方法是使用默认参数,根本不需要不带参数的构造函数classBoxin theight,width,depth;public:Box(i ntht=O,i ntwd=0,i ntdp=O)精心整理height=ht;width=wd;depth=dp;in tvolume()retur nheight

19、*width*depth;三、析构函数当一个类的对象离开作用域时,析构函数将被调用(系统自动调用)。析构函数的名字和类名一 样,不过要在前面加上。对一个类来说,只能允许一个析构函数,析构函数不能有参数,并且也 没有返回值。析构函数的作用是完成一个清理工作,如释放从堆中分配的内存。我们也可以只给出析构函数的形式,而不给出起具体函数体,其效果是一样的,如上面的例子。 但在有些情况下,析构函数又是必需的。如在类中从堆中分配了内存,则必须在析构函数中释放。C+勺内部数据类型遵循隐式类型转换规则。假设某个表达市中使用了一个短整型变量,而编译器 根据上下文认为这儿需要是的长整型, 则编译器就会根据类型转换

20、规则自动把它转换成长整型, 这种隐式转换出现在赋值、参数传递、 返回值、初始化和表达式中。我们也可以为类提供相应的转换规则。对一个类建立隐式转换规则需要构造一个转换函数,该函数作为类的成员,可以把该类的对象 和其他数据类型的对象进行相互转换。声明了转换函数,就告诉了编译器,当根据句法判定需要类 型转换时,就调用函数。有两种转换函数。一种是转换构造函数;另一种是成员转换函数。需要采用哪种转换函数取决 于转换的方向。一、转换构造函数当一个构造函数仅有一个参数,且该参数是不同于该类的一个数据类型, 这样的构造函数就叫 转换构造函数。转换构造函数把别的数据类型的对象转换为该类的一个对象。和其他构造函数

21、一样, 如果声明类的对象的初始化表同转换构造函数的参数表相匹配, 该函数就会被调用。当在需要使用 该类的地方使用了别的数据类型,便宜器就会调用转换构造函数进行转换。#i ncludeiostream.h#i ncludetime.h#in cludestdio.h精心整理classDatein tmo,da,yr;public:Date(time_t); voiddisplay();;voidDate:display()charyear5;if(yr10)spri ntf(year,0%d,yr); elsespri ntf(year,%d,yr); couttm_mday;mo=tim-tm

22、_m on+1; yr=tim-tm_year; if(yr=100)yr-=100;in tmai n()精心整理time_t now=time(0);Datedt( no w);dt.display();returnO;本程序先调用time()函数来获取当前时间,并把它赋给time_t对象;然后程序通过调用Date 类的转换构造函数来创建一个 Date对象,该对象由time_t对象转换而来。time_t对象先传递给l ocaltime()函数,然后返回一个指向tm结构(time.h文件中声明)的指针,然后构造函数把结构中 的日月年的数值拷贝给 Date对象的数据成员,这就完成了从time_

23、t对象到Date对象的转换。二、成员转换函数成员转换函数把该类的对象转换为其他数据类型的对象。在成员转换函数的声明中要用到关键 字operator。这样声明一个成员转换函数:operatoraaa();在这个例子中,aaa就是要转换成的数据类型的说明符。这里的类型说明符可以是任何合法的 C+啖型,包括其他的类。如下来定义成员转换函数 ;Class name:operatoraaa()类名标识符是声明了该函数的类的类型说明符。上面定义的 Date类并不能把该类的对象转换回time_t型变量,但可以把它转换成一个长整型值,计算从 2000年1月1日到现在的天数。#i ncludeiostream.

24、hclassDatein tmo,da,yr;public:Date(i ntm,i ntd,i nty)mo=m;da=d;yr=y;operatori nt(); 声明;精心整理Date:operatori nt() 定义static in tdys=31,28,31,30,31,30,31,31,30,31,30,31;in tdays=yr-2000;days*=365;days+=(yr-2000)/4;for(i nti=0;idays+=dysi;days+=da;retur ndays;in tmai n()Date no w(12,24,2003);intsince=now;

25、coutvretur n0;三、类的转换也可以定义转换函数来实现两上面两个例子都是C+类对象和内部数据对象之间的相互转换 个类对象之间的相互转换。#i ncludeiostream.hclassCustomDatepublic:in tda,yr;CustomDate(i ntd=0,i nty=0)da=d;yr=y;精心整理精心整理voiddisplay()coutv;classDatein tmo,da,yr;public:Date(i ntm=0,i ntd=O,i nty=0)mo=m;da=d;yr=y;Date(co nstCustomDate&);/ 转换构造函数 operat

26、orCustomDate(); 成员转换函数voiddisplay()coutv;static in tdys=31,28,31,30,31,30,31,31,30,31,30,31;Date:Date(c on stCustomDate&jd)yr=jd.yr;da=jd.da;for(mo=0;modysmo)da-=dysmo;elsebreak;mo+;精心整理Date:operatorCustomDate()CustomDatecd(0,yr);for(i nti=0;icd.da+=da;returned;in tmai n()Datedt(12,24,3);CustomDatec

27、d;cd=dt;调用成员转换函数cd.display();dt=cd;调用转换构造函数dt.display();return。;这个例子中有两个类 CustomDate和Date, CustomDate型日期包含年份和天数。这个例子没有考虑闰年情况。但是在实际构造一个类时,应该考虑到所有问题的可能性。在Date里中具有两种转换函数,这样,当需要从 Date型变为CustomDate型十,可以调用成员转换函数;反之可以调用转换构造函数。不能既在Date类中定义成员转换函数,又在CustomDate类里定义转换构造函数。那样编译器 在进行转换时就不知道该调用哪一个函数,从而出错 四、转换函数的调用

28、精心整理C+里调用转换函数有三种形式:第一种是隐式转换,例如编译器需要一个Date对象,而程序 提供的是CustomDate对象,编译器会自动调用合适的转换函数。另外两种都是需要在程序代码中 明确给出的显式转换。C+虽制类型转换是一种,还有一种是显式调用转换构造函数和成员转换函 数。下面的程序给出了三中转换形式:#i ncludeiostream.hclassCustomDatepublic:in tda,yr;CustomDate(i ntd=O,i nty=O)da=d;yr=y;voiddisplay()cout;classDatein tmo,da,yr;public:Date(i n

29、tm,i ntd,i nty)mo=m;da=d;yr=y;operatorCustomDate();精心整理static in tdys=31,28,31,30,31,30,31,31,30,31,30,31;CustomDatecd(0,yr);for(i nti=0;icd.da+=da;returncd;in tmai n()Datedt(11,17,89);CustomDatecd;cd=dt;cd.display();cd=(CustomDate)dt;cd.display();cd=CustomDate(dt);cd.display();return。;五、转换发生的情形上面的几个例子都是通过不能类型对象之间的相互赋值来调用转换函数,还有几种调用的可 能:参数传递初始化返回值表达式语句精心整理精心

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1