2022年全国计算机二级C++考试的知识点汇总 .pdf
《2022年全国计算机二级C++考试的知识点汇总 .pdf》由会员分享,可在线阅读,更多相关《2022年全国计算机二级C++考试的知识点汇总 .pdf(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2017年全国计算机二级C+ 考试复习知识点汇总一、C+ 概述( 一) 发展历史1980年,Bjarne Stroustrup博士开始着手创建一种模拟语言,能够具有面向对象的程序设计特色。在当时,面向对象编程还是一个比较新的理念,Stroustrup 博士并不是从头开始设计新语言,而是在C语言的基础上进行创建。这就是 C+ 语言。1985年,C+ 开始在外面慢慢流行。经过多年的发展,C+ 已经有了多个版本。为次, ANSI和 ISO的联合委员会于 1989年着手为 C+ 制定标准。 1994年 2月,该委员会出版了第一份非正式草案,1998年正式推出了 C+ 的国际标准。( 二) C 和 C+
2、 C+ 是 C的超集,也可以说 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函数库头文件中的字
3、符数组处理函数。C+ 中用来做控制态输入输出的iostream 类库替代了标准 C中的 stdio 函数库。C+ 中的 try/catch/throw异常处理机制取代了标准C中的 setjmp() 和 longjmp() 函数。二、关键字和变量C+ 相对与 C增加了一些关键字,如下:typename bool dynamic_cast mutable namespace static_cast using catch explicit new virtual operator false private template volatile const protected this wchar_
4、t 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 34 页 - - - - - - - - - const_cast public throw friend true reinterpret_cast try bitor xor_e and_eq compl or_eq not_eq bitand 在 C+ 中还增加了 bool 型变量和 wchar_t 型变量:布尔型变量是有两种逻辑状态的变量,它包含两个值: 真和假。如果在表达式中使用了布尔型变量,那么将根据变量值的
5、真假而赋予整型值1 或 0。要把一个整型变量转换成布尔型变量,如果整型值为0,则其布尔型值为假 ; 反之如果整型值为非 0,则其布尔型值为真。布儿型变量在运行时通常用做标志,比如进行逻辑测试以改变程序流程。#include iostream.h int main() bool flag; flag=true; if(flag) cout return 0; C+ 中还包括 wchar_t 数据类型, wchar_t 也是字符类型,但是是那些宽度超过 8 位的数据类型。许多外文字符集所含的数目超过256 个,char 字符类型无法完全囊括。 wchar_t 数据类型一般为16 位。标准 C+ 的
6、 iostream 类库中包括了可以支持宽字符的类和对象。用 wout 替代 cout 即可。#include iostream.h int main() wchar_t wc; wc=b; wout wc=y; wout wc=e; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 34 页 - - - - - - - - - wout return 0; 说明一下:某些编译器无法编译该程序( 不支持该数据类型 ) 。三、强制类型转换有时候,根据表达式的需要,某个数据需要
7、被当成另外的数据类型来处理,这时, 就需要强制编译器把变量或常数由声明时的类型转换成需要的类型。为此,就要使用强制类型转换说明,格式如下:int* iptr=(int*) &table; 表达式的前缀 (int*)就是传统 C风格的强制类型转换说明(typecast), 又可称为强制转换说明 (cast) 。强制转换说明告诉编译器把表达式转换成指定的类型。有些情况下强制转换是禁用的, 例如不能把一个结构类型转换成其他任何类型。数字类型和数字类型、指针和指针之间可以相互转换。当然,数字类型和指针类型也可以相互转换, 但通常认为这样做是不安全而且也是没必要的。强制类型转换可以避免编译器的警告。lo
8、ng int el=123; short i=(int) el; float m=34.56; int i=(int) m; 上面两个都是 C风格的强制类型转换, C+ 还增加了一种转换方式,比较一下上面和下面这个书写方式的不同:long int el=123; short i=int (el); float m=34.56; int i=int (m); 使用强制类型转换的最大好处就是:禁止编译器对你故意去做的事发出警告。但是,利用强制类型转换说明使得编译器的类型检查机制失效,这不是明智的选择。通常,是不提倡进行强制类型转换的。除非不可避免,如要调用malloc() 函数时要用的 void
9、型指针转换成指定类型指针。四、标准输入输出流在 C语言中,输入输出是使用语句scanf() 和 printf()来实现的,而 C+ 中是使用类来实现的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 34 页 - - - - - - - - - #include iostream.h main() /C+中 main() 函数默认为 int型,而 C语言中默认为 void 型。 int a; cout a; /*输入一个数值 */ cout return 0; cin,c
10、out,endl对象,他们本身并不是C+ 语言的组成部分。虽然他们已经是 ANSI标准 C+ 中被定义,但是他们不是语言的内在组成部分。在 C+ 中不提供内在的输入输出运算符,这与其他语言是不同的。输入和输出是通过C+ 类来实现的, cin 和 cout 是这些类的实例,他们是在C+ 语言的外部实现。在 C+ 语言中,有了一种新的注释方法,就是/ ,在该行 / 后的所有说明都被编译器认为是注释,这种注释不能换行。C+ 中仍然保留了传统C语言的注释风格 /* */ 。C+ 也可采用格式化输出的方法:#include iostream.h int main() int a; cout a; cou
11、t 类的设计、构造函数和析构函数一、类的设计1. 类的声明class 类名名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 34 页 - - - - - - - - - private: /私有. public: /公有. ; 2. 类的成员一般在 C+ 类中,所有定义的变量和函数都是类的成员。如果是变量,我们就叫它数据成员如果是函数,我们就叫它成员函数。3. 类成员的可见性private和 public访问控制符决定了成员的可见性。由一个访问控制符设定的可访问状态将一直持
12、续到下一个访问控制符出现,或者类声明的结束。 私有成员仅能被同一个类中的成员函数访问,公有成员既可以被同一类中的成员函数访问,也可以被其他已经实例化的类中函数访问。当然,这也有例外的情况,这是以后要讨论的友元函数。类中默认的数据类型是private , 结构中的默认类型是public 。 一般情况下,变量都作为私有成员出现,函数都作为公有成员出现。类中还有一种访问控制符protected ,叫保护成员,以后再说明。4. 初始化在声明一个类的对象时,可以用圆括号() 包含一个初始化表。看下面一个例子:#include iostream.h class Box private: int heigh
13、t,width,depth; /3个私有数据成员名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 34 页 - - - - - - - - - public: Box(int,int,int); Box(); int volume(); /成员函数; Box:Box(int ht,int wd,int dp) height=ht; width=wd; depth=dp; Box:Box() /nothing int Box:volume() return height*wi
14、dth*depth; int main() Box thisbox(3,4,5); /声明一个类对象并初始化cout return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 34 页 - - - - - - - - - 当一个类中没有 private成员和 protected成员时,也没有虚函数, 并且不是从其他类中派生出来的,可以用 来初始化。 ( 以后再讲解 ) 5. 内联函数内联函数和普通函数的区别是: 内联函数是在编译过程中展开的。通常内联函数必须简短
15、。 定义类的内联函数有两种方法:一种和 C语言一样, 在定义函数时使用关键字 inline。如:inline int Box:volume() return height*width*depth; 还有一种方法就是直接在类声明的内部定义函数体,而不是仅仅给出一个函数原型。我们把上面的函数简化一下:#include iostream.h class Box private: int height,width,depth; public: Box(int ht,int wd,int dp) height=ht; width=wd; depth=dp; Box(); 名师资料总结 - - -精品资料
16、欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 34 页 - - - - - - - - - int volume() return height*width*depth; ; int main() Box thisbox(3,4,5); /声明一个类对象并初始化cout return 0; 这样,两个函数都默认为内联函数了。二、构造函数什么是构造函数 ?通俗的讲,在类中,函数名和类名相同的函数称为构造函数。上面的 Box() 函数就是构造函数。 C+ 允许同名函数,也就允许在一个类中有多个构造函数。如
17、果一个都没有,编译器将为该类产生一个默认的构造函数,这个构造函数可能会完成一些工作,也可能什么都不做。绝对不能指定构造函数的类型,即使是void 型都不可以。实际上构造函数默认为 void 型。当一个类的对象进入作用域时, 系统会为其数据成员分配足够的内存,但是系统不一定将其初始化。 和内部数据类型对象一样, 外部对象的数据成员总是初始化为 0。局部对象不会被初始化。构造函数就是被用来进行初始化工作的。当自动类型的类对象离开其作用域时,所站用的内存将释放回系统。看上面的例子,构造函数Box() 函数接受三个整型擦黑素,并把他们赋值给立方体对象的数据成员。如果构造函数没有参数,那么声明对象时也不
18、需要括号。1. 使用默认参数的构造函数当在声明类对象时,如果没有指定参数,则使用默认参数来初始化对象。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 34 页 - - - - - - - - - #include iostream.h class Box private: int height,width,depth; public: Box(int ht=2,int wd=3,int dp=4) height=ht; width=wd; depth=dp; Box();
19、 int volume() return height*width*depth; ; int main() Box thisbox(3,4,5); /初始化Box defaulbox; /使用默认参数cout cout return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 34 页 - - - - - - - - - 2. 默认构造函数没有参数或者参数都是默认值的构造函数称为默认构造函数。如果你不提供构造函数,编译器会自动产生一个公共的默认构造函数,这个构造
20、函数什么都不做。如果至少提供一个构造函数,则编译器就不会产生默认构造函数。3. 重载构造函数一个类中可以有多个构造函数。 这些构造函数必须具有不同的参数表。在一个类中需要接受不同初始化值时,就需要编写多个构造函数, 但有时候只需要一个不带初始值的空的Box 对象。#include iostream.h class Box private: int height,width,depth; public: Box() /nothing Box(int ht=2,int wd=3,int dp=4) height=ht; width=wd; depth=dp; Box(); int volume()
21、 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 34 页 - - - - - - - - - return height*width*depth; ; int main() Box thisbox(3,4,5); /初始化Box otherbox; otherbox=thisbox; cout return 0; 这两个构造函数一个没有初始化值,一个有。当没有初始化值时, 程序使用默认值,即 2,3,4。但是这样的程序是不好的。它允许使用初始化过的和没有初始化过的Bo
22、x对象,但它没有考虑当 thisbox给 otherbox 赋值失败后,volume() 该返回什么。较好的方法是,没有参数表的构造函数也把默认值赋值给对象。class Box int height,width,depth; public: Box() height=0;width=0;depth=0; Box(int ht,int wd,int dp) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 34 页 - - - - - - - - - height=ht;w
23、idth=wd;depth=dp; int volume() return height*width*depth; ; 这还不是最好的方法, 更好的方法是使用默认参数, 根本不需要不带参数的构造函数。class Box int height,width,depth; public: Box(int ht=0,int wd=0,int dp=0) height=ht;width=wd;depth=dp; int volume() return height*width*depth; ; 三、析构函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
24、- - - - 名师精心整理 - - - - - - - 第 12 页,共 34 页 - - - - - - - - - 当一个类的对象离开作用域时, 析构函数将被调用 ( 系统自动调用 ) 。析构函数的名字和类名一样,不过要在前面加上 。对一个类来说,只能允许一个析构函数,析构函数不能有参数, 并且也没有返回值。 析构函数的作用是完成一个清理工作,如释放从堆中分配的内存。我们也可以只给出析构函数的形式,而不给出起具体函数体, 其效果是一样的,如上面的例子。但在有些情况下,析构函数又是必需的。如在类中从堆中分配了内存,则必须在析构函数中释放。C+ 的内部数据类型遵循隐式类型转换规则。假设某个表
25、达市中使用了一个短整型变量,而编译器根据上下文认为这儿需要是的长整型,则编译器就会根据类型转换规则自动把它转换成长整型, 这种隐式转换出现在赋值、 参数传递、返回值、初始化和表达式中。我们也可以为类提供相应的转换规则。对一个类建立隐式转换规则需要构造一个转换函数,该函数作为类的成员,可以把该类的对象和其他数据类型的对象进行相互转换。声明了转换函数, 就告诉了编译器,当根据句法判定需要类型转换时,就调用函数。有两种转换函数。一种是转换构造函数; 另一种是成员转换函数。需要采用哪种转换函数取决于转换的方向。一、转换构造函数当一个构造函数仅有一个参数, 且该参数是不同于该类的一个数据类型,这样的构造
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年全国计算机二级C+考试的知识点汇总 2022 全国计算机 二级 C+ 考试 知识点 汇总
限制150内