计算机二级之C++专业知识①
前排提醒:做选择题的时候不能用编译器,只能用脑子想
里面标了⭕的是新内容,最好把这一段好好看看
1、C++概述
1.1 比较C和C++
C++相对于C语言最更本的变化是引入了类与对象的概念(最大改进也是这个)
面向对象思想:具有封装性(封装了数据和操作)、继承性、多态性
类设计之初,就是为了体现面向对象的思想,将有相似属性和行为的实体抽象为一个类
对象是类的一个特定实例,一个对象必须属于某个类,一个类必须有很多个对象
例题:
答案:A
重载函数属于编译时多态,并非运行时
1.2 C++标识符的规则
①只能有字母、数字、下划线,不能用数字开头②区分大小写③不能用C++关键字(原有的内容)
例题:
答案:D
答案:D
1.3 new和delete
用于申请和释放堆中分配的存储空间
指针变量名=new 类型名(初始化方式);
delete 指针名
使用new运算符创建数组时必须为数组元素指定大小而非初值
1.4 C++程序的开发过程
开发一个C++程序经历五步:编辑(程序文件的输入和修改)、编译(cpp转obj)、连接(把目标文件形成可执行程序的步骤)、运行、调试
在windows下,由C++源文件编译而成的目标文件扩展名为.obj(注意linux是.o)
2、数据结构、运算符、表达式
2.1 C++的数据类型
①unsigned无符号、signed有符号
②带小数点的是double,带f的是float,带L的是long (int)
③运算中有float、double输出结果优先这俩
④注意单引号才是字符类型,双引号是字符串
⑤注意进制,如017表示八进制数,如果出现8以上的数就不符合规则
答案:B
2.2 字符串的长度
①\n等转义字符视为一个字符
例子:"8+a=b\n\r"只有7个字符
②字符串的\0需要预留空间(一般在char定义字符串时),但是字符串长度不包括\0
答案:C
1定义的是字符,34长度判断错误,应该是6
⭕2.3 枚举
enum 名字{内容}
从0开始计数,遇到初始化从初始化的数继续开始
答案:D
⭕2.4 变量的存储方法
静态存储、动态存储两大类
包含自动auto、静态static、寄存器的register、外部extern
没有说明默认auto
①外部变量
extern int a;
提前声明全局变量a或者对变量a做外部变量声明
注意不是初始化(定义)只能声明,因此运行到这里时系统不会为这个变量分配空间
②静态变量(符号常量)
const int a=1;
定义之后就不能修改
注意非指针一定要赋初值,指针无所谓
2.5 运算符和表达式
①已知值不能做赋值的左值(不能放在等号左边)
②int a=整数*浮点数,先按浮点数计算再输出整数
其他的也一样
具体规则:
例题(隐式转换)
答案:D
2,3都是整数,2/3=0,随后转换成double型0.0
③and(&&)的短路现象,判断前面结果完成后(false)后面就不会执行
例题:
答案:D
④优先度(从1到9逐渐降低)
⑤赋值运算符只能作为类的成员函数重载
3、基本控制结构
3.1 大括号的使用
例题1:
答案:D
例题2:
答案:B
⭕3.2 条件表达式
表达式1?表达式2:表达式3
表达式1为真时返回表达式2的值,反之返回表达式3的值
答案:A
3.3 自加减的先后顺序
例题:
答案:D
答案:C
4、数组、指针与引用
4.1 参数传递
传值(=)、传址(&)、传引用
往函数里传值不return无法改变值,但是传地址(如&a)就可以修改
例题:
答案:C
4.2 数组的定义
直接看题
4.3 数组用指针表示
*(p+n)等价于a[n]
5、函数
⭕5.1 内联函数
为了①取代C语言中带参数的宏(预处理宏函数)②要通过函数实现一种不太复杂的功能并且要求较快的函数调用速度,C++中使用内联函数
①在类体中定义的成员函数
②使用inline定义的函数
通过编译器来实现内联函数(在编译时将该函数的目标代码插入每个调用该函数的地方),内联函数可以有参数
例题:哪些是内联函数
答案:f1、f4
6、类(建设中)
7、继承(建设中)
⭕8、运算符的重载
规则
①C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;
②重载不能改变运算符运算对象的个数;
③重载不能改变运算符的优先级和结合性;
④重载运算符的函数不能有默认的参数;
⑤重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类型。
8.1 必须定义为类的成员函数才能重载的运算符
①重载运算符(作为成员函数是没有形参的,反之有一个形参)
函数类型 operator 运算符名称(参数列表)
{对运算符的重载处理}
如=
②下标运算符[]
③函数调用运算符()
④成员访问箭头操作符->
其他运算符能够作为友元函数重载
例题
答案:D
8.2 重载数据类型
operator 类型名()
{实现转换的语句}
8.3 重载<<和>>
不能作为成员函数重载
用户自己定义的类型的数据,是不能直接用“<<”和“>>”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,必须对它们重载。
对“<<”和“>>”重载的函数形式如下:
istream & operator>>(istream &,自定义类&)
ostream & operator<<(ostream&,自定义类&);
重载运算符“>>”的函数的第一个参数和函数的类型都必须是istream&类型,第二个参数是要进行输入操作的类。
重载“<<”的函数的第一个参数和函数的类型都必须是ostream&类型,第二个参数是要进行输出操作的类。
注意:只能把此类重载函数作为友元函数或普通函数,不能把他们定为类的成员函数
例题:
答案:D
8.4 不能重载的运算符和函数
.
.*
::
sizeof
?:
析构函数
⭕9、模板
9.1 函数模版
template<模板形参表><函数声明>
每个模板形参可以出现的形式:
①typename <参数名>
②class <参数名>
③<类型修饰> <参数名>
一定条件下模板形参表可以省略(但是符号不能省)
例题1:
答案:A
例题2(对省略的描述)
性质:
①函数模板是一个抽象函数,使用模板定义的函数可以有返回值,函数模版的虚拟类型参数并不是函数参数。使用不同的类型参数可以从函数模版得到不同的实例函数
例题:
②模板参数不能是算数表达式
③实例个数不等于对象个数
例题1:
答案:B
例题2:
答案:C
例题3(超大杯题目):
9.2 在模板外定义的成员函数
template<模板形参表>
返回类型 类名<模板形参表>::函数名(函数形参表)函数体
例题:
答案:A
9.3 类模板
template<typename T>
class Cubic{public:T f();};
类模板是一系列相关类的模板或样板,这些类的成员组成相同,成员函数的源代码形式相同,只有成员的类型以及成员函数的参数和返回值的类型不同。
主要作用:生成类(不是生成抽象类)
①类模板的定义和声明都以关键字template开头。关键字后面是一个用逗号分隔的模板参数表,用尖括号“~”括起来,这个表被称为类模板的模板参数表。
②类模板是类的抽象,类是类模板的实例。类模板使类中的一些数据成员和成员函数的参数或返回值可以取任意的数据类型。模板形参可以是虚拟类型形参也可以是常规形参,与函数模板不同,类模板声明的常规参数可以带有默认值。
③类模板中可以包含构造函数,类模板的成员函数都是模板函数
④类模板的模板参数可以作为数据成员的类型、返回值类型、函数参数类型
一个类中存在纯虚函数,这个类不一定就是类模板
④模板的类型参数由关键字class或typename(标准C++之前不支持)及其后标识符构成,除了这两个也可以用常规类型声明函数类型
例题:
10、c++流
与每个输入或输出设备的信息交换都可以用流类实现
从流中获取数据叫提取,添加数据叫插入
10.1 流操作符
格式控制要导入头文件iomanip
setw(只对一次输出有效)、setprecision、setfill(填充字符)、showpoint(强制输出浮点数小数点和尾数0)、setiosflags(ios::fixed)和fixed等价、setiosflags(ios::right)右对齐(left就是左对齐)、endl等
例题:输出啥?
答案:###123.456
⭕10.2 文件I/O流
①要包含头文件fstream
②ofstream从内存到硬盘(导出),ifstream从硬盘到内存(读入,默认打开方式ios_base::in),fstream即可读又可写(使用时必须定义打开方式)
ios_base::in是只读,ios_base::app是读写(也可以创造文件),ios_base::trunc清空文件内容后再开始写
打开文件可以调用文件流对象.open(磁盘文件名,输入输出方式)
注意文件路径中的\要双写
例题:
答案:A
答案:D
③文件流定位方式
ios_base::beg表示文件开头
ios_base::cur表示指针当前位置
ios_base::end表示文件尾部
④一些判断函数:eof()检测指针是否到达文件尾、ifile.fail()读取文件失败、ofile.fail()保存文件失败、iofile.fail()都失败
⑤getline()函数可以读一行字符串
注意与get()区别:这个函数读的是字符序列
cin遇到空格、tab(制表符)、回车(换行)都会停止
⑥C++预定义的4个预定义流对象:cin、cout、cerr(标准出错信息输出)、clog(带缓冲的标准出错信息输出)
⑦进制转换:oct八进制、dec十进制、hex十六进制
copyright ljnljn,all rights reserved