收藏 分享(赏)

全国详细计算机二级C++考试复习计划重点资料库汇总.doc

上传人:小屁孩 文档编号:9142633 上传时间:2019-07-25 格式:DOC 页数:25 大小:482.50KB
下载 相关 举报
全国详细计算机二级C++考试复习计划重点资料库汇总.doc_第1页
第1页 / 共25页
全国详细计算机二级C++考试复习计划重点资料库汇总.doc_第2页
第2页 / 共25页
全国详细计算机二级C++考试复习计划重点资料库汇总.doc_第3页
第3页 / 共25页
全国详细计算机二级C++考试复习计划重点资料库汇总.doc_第4页
第4页 / 共25页
全国详细计算机二级C++考试复习计划重点资料库汇总.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

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

2、的超集,也可以说 C是 C+的子集,因为 C先出现。按常理说,C+编译器能够编译任何 C程序,但是 C和 C+还是有一些小差别。例如 C+增加了 C不具有的关键字。这些关键字能作为函数和变量的标识符在 C程序中使用,尽管 C+包含了所有的 C,但显然没有任何 C+编译器能编译这样的 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()和 longjmp()函数。二、关键字和变量C+相对与 C增加了一些关键字,如下:typename bool dynamic_cast mutable namespacestatic_cast using catch explicit newvirtual operator false private templatevolatile const protected this wchar_tconst_cast public throw

4、friend truereinterpret_cast trybitor xor_e and_eq compl or_eqnot_eq bitand在 C+中还增加了 bool型变量和 wchar_t型变量:布尔型变量是有两种逻辑状态的变量,它包含两个值:真和假。如果在表达式中使用了布尔型变量,那么将根据变量值的真假而赋予整型值 1或 0。要把一个整型变量转换成布尔型变量,如果整型值为 0,则其布尔型值为假;反之如果整型值为非 0,则其布尔型值为真。布儿型变量在运行时通常用做标志,比如进行逻辑测试以改变程序流程。#include iostream.hint main()bool flag;fl

5、ag=true;if(flag) cout a; /*输入一个数值*/cout a;cout类的设计、构造函数和析构函数一、类的设计1.类的声明class 类名private: /私有.public: /公有.;2.类的成员一般在 C+类中,所有定义的变量和函数都是类的成员。如果是变量,我们就叫它数据成员如果是函数,我们就叫它成员函数。3.类成员的可见性private 和 public访问控制符决定了成员的可见性。由一个访问控制符设定的可访问状态将一直持续到下一个访问控制符出现,或者类声明的结束。私有成员仅能被同一个类中的成员函数访问,公有成员既可以被同一类中的成员函数访问,也可以被其他已经实

6、例化的类中函数访问。当然,这也有例外的情况,这是以后要讨论的友元函数。类中默认的数据类型是 private,结构中的默认类型是 public。一般情况下,变量都作为私有成员出现,函数都作为公有成员出现。类中还有一种访问控制符 protected,叫保护成员,以后再说明。4.初始化在声明一个类的对象时,可以用圆括号()包含一个初始化表。看下面一个例子:#include iostream.hclass Boxprivate:int height,width,depth; /3 个私有数据成员public:Box(int,int,int);Box();int volume(); /成员函数;Box:

7、Box(int ht,int wd,int dp)height=ht;width=wd;depth=dp;Box:Box()/nothingint Box:volume()return height*width*depth;int main()Box thisbox(3,4,5); /声明一个类对象并初始化couttm_mday;mo=tim-tm_mon+1;yr=tim-tm_year;if(yr=100) yr-=100;int main()time_t now=time(0);Date dt(now);dt.display();return 0;本程序先调用 time()函数来获取当前

8、时间,并把它赋给 time_t对象;然后程序通过调用 Date类的转换构造函数来创建一个 Date对象,该对象由 time_t对象转换而来。time_t 对象先传递给 localtime()函数,然后返回一个指向 tm结构(time.h 文件中声明)的指针,然后构造函数把结构中的日月年的数值拷贝给 Date对象的数据成员,这就完成了从 time_t对象到 Date对象的转换。二、成员转换函数成员转换函数把该类的对象转换为其他数据类型的对象。在成员转换函数的声明中要用到关键字 operator。这样声明一个成员转换函数:operator aaa();在这个例子中,aaa 就是要转换成的数据类型的

9、说明符。这里的类型说明符可以是任何合法的 C+类型,包括其他的类。如下来定义成员转换函数;Classname:operator aaa()类名标识符是声明了该函数的类的类型说明符。上面定义的 Date类并不能把该类的对象转换回 time_t型变量,但可以把它转换成一个长整型值,计算从2000年 1月 1日到现在的天数。#include iostream.hclass Dateint mo,da,yr;public:Date(int m,int d,int y) mo=m; da=d; yr=y;operator int(); /声明;Date:operator int() /定义static

10、int dys=31,28,31,30,31,30,31,31,30,31,30,31;int days=yr-2000;days*=365;days+=(yr-2000)/4;for(int i=0;i days+=dysi;days+=da;return days;int main()Date now(12,24,2003);int since=now;coutdysmo) da-=dysmo;else break;mo+;Date:operator CustomDate()CustomDate cd(0,yr);for(int i=0;i cd.da+=da;return cd;int

11、main()Date dt(12,24,3);CustomDate cd;cd = dt; /调用成员转换函数cd.display();dt = cd; /调用转换构造函数dt.display();return 0;这个例子中有两个类 CustomDate和 Date,CustomDate 型日期包含年份和天数。这个例子没有考虑闰年情况。但是在实际构造一个类时,应该考虑到所有问题的可能性。在 Date里中具有两种转换函数,这样,当需要从 Date型变为 CustomDate型十,可以调用成员转换函数;反之可以调用转换构造函数。不能既在 Date类中定义成员转换函数,又在 CustomDate类

12、里定义转换构造函数。那样编译器在进行转换时就不知道该调用哪一个函数,从而出错.四、转换函数的调用C+里调用转换函数有三种形式:第一种是隐式转换,例如编译器需要一个Date对象,而程序提供的是 CustomDate对象,编译器会自动调用合适的转换函数。另外两种都是需要在程序代码中明确给出的显式转换。C+强制类型转换是一种,还有一种是显式调用转换构造函数和成员转换函数。下面的程序给出了三中转换形式:#include iostream.hclass CustomDatepublic:int da, yr;CustomDate(int d=0,int y=0) da=d; yr=y;void disp

13、lay()cout ;class Dateint mo, da, yr;public:Date(int m,int d,int y)mo=m; da=d; yr=y;operator CustomDate();Date:operator CustomDate()static int dys=31,28,31,30,31,30,31,31,30,31,30,31;CustomDate cd(0,yr);for(int i=0;i cd.da+=da;return cd;int main()Date dt(11,17,89);CustomDate cd;cd = dt;cd.display();c

14、d = (CustomDate) dt;cd.display();cd = CustomDate(dt);cd.display();return 0;五、转换发生的情形上面的几个例子都是通过不能类型对象之间的相互赋值来调用转换函数,还有几种调用的可能:参数传递初始化返回值表达式语句这些情况下,都有可能调用转换函数。下面的程序不难理解,就不分析了。#include iostream.hclass CustomDatepublic:int da, yr;CustomDate() CustomDate(int d,int y) da=d; yr=y;void display()cout ;class

15、 Dateint mo, da, yr;public:Date(int m,int d,int y) mo=m; da=d; yr=y; operator CustomDate();Date:operator CustomDate()static int dys=31,28,31,30,31,30,31,31,30,31,30,31;CustomDate cd(0,yr);for (int i=0;i cd.da+=da;return cd;class TesterCustomDate cd;public:explicit Tester(CustomDate c) cd=c; void dis

16、play() cd.display(); ;void dispdate(CustomDate cd)cd.display();CustomDate rtndate()Date dt(9,11,1);return dt;int main()Date dt(12,24,3);CustomDate cd;cd = dt;cd.display();dispdate(dt);Tester ts(dt);ts.display();cd = rtndate();cd.display();return 0;六、显式构造函数注意上面 Tester类的构造函数前面有一个 explicit修饰符。如果不加上这个关键

17、字,那么在需要把 CustomDate对象转换成 Tester对象时,编译器会把该函数当作转换构造函数来调用。但是有时候,并不想把这种只有一个参数的构造函数用于转换目的,而仅仅希望用它来显式地初始化对象,此时,就需要在构造函数前加 explicit。如果在声明了 Tester对象以后使用了下面的语句将导致一个错误:ts=jd; /error这个错误说明,虽然 Tester类中有一个以 Date型变量为参数的构造函数,编译器却不会把它看作是从 Date到 Tester的转换构造函数,因为它的声明中包含了 explicit修饰符。七、表达式内部的转换在表达式内部,如果发现某个类型和需要的不一致,就

18、会发生错误。数字类型的转换是很简单,这里就不举例了。下面的程序是把 Date对象转换成长整型值。#include iostream.hclass Dateint mo, da, yr;public:Date(int m,int d,int y)mo=m; da=d; yr=y;operator long();Date:operator long()static int dys=31,28,31,30,31,30,31,31,30,31,30,31;long days=yr;days*=365;days+=(yr-1900)/4; /从 1900年 1月 1日开始计算for(int i=0;i days+=da;return days;int main()Date today(12,24,2003);const long ott=123;long sum=ott+today;cout return 0;在表达式中,当需要转换的对象可以转换成某个数字类型,或者表达式调用了作用于某个类的重载运算符时,就会发生隐式转换。

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

当前位置:首页 > 高等教育 > 专业基础教材

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


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

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

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