918选择和填空题
这份文档就是对c++中常见易错的选择题进行归类整理,按照蓝豹子的目录进行归类,文档中提及的蓝豹子就是《C++程序设计思想与方法》慕课版第3版 人民邮电出版社
持续更新中ing
1.绪论
2.程序的基本组成
常量
蓝豹子p17:unsigned int的字节是4
这里主要原因是常量字符串必须初始化,具体解释可以开蓝豹子p24有一句话“const表示所定义的字符…”
数据类型
这题蓝豹子没有,但是字符串处理函数比较常见,可以积累。
赋值运算符
蓝豹子p30,但没有讲单目运算符是什么,可是这个也比较常见
单目运算是指运算符包括算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符。:- = +
双目运算符:-- == ++
三目运算符,又称条件运算符,也叫多目运算符: b = (a > c) ? a : c;
3.分支程序设计
4.循环程序设计
蓝豹子p63:break可以用于switch中而continue只能用于循环体中,这里很多人可能没想到
5.数组
书中没有提及,但比较重要
6.函数
函数调用
蓝豹子p109:实际参数和形式参数是一一对应的,它们的个数,排列顺序要完全相同,类型要完全兼容。
蓝豹子p109:单向传递和双向传递也叫值传递和引用传递,值传递在函数中对形式参数的任何修改对实际参数都没有影响
函数变量
没有在蓝豹子里找到:在C++程序中,如果我没没有对函数的类型进行说明的话,那么函数的默认类型是int类型的,也就是说函数必须返回一个int型的返回值。
7.指针
第一题:a[3]调用3次,p是类指针。
类指针要分配了动态空间才调用构造函数的
第二题:a,b各一次,c调用3次,p是类指针。
类指针要分配了动态空间才调用构造函数的
动态内存分配
蓝豹子p158:通过new操作可以申请一个动态的一维数组;要收回某个动态变量,可以使用delete操作。
引用类型与函数
蓝豹子p168
常量指针
这一块书上没有,但考试试卷难道逐年增加,以防万一他考
这是一个常量指针,不能在指向别的变量,但指向的值可以修改
8.结构体
9.模块化开发
这题蓝豹子没有讲
10.创建新的类型
类的定义
蓝豹子p224中间有一段的最后一句话:如果没有指明访问特性,该成员默认认为是private。
这题比较综合,但是都是各个部分最基础的考点!
对于类中不能初始化变量的个人理解:
类的定义实际相当与类型声明,并没有分配存储空间,初始化的数据哪里放? 类实例化以后才会有实体存储地址及空间。
对象的使用
蓝豹子没有讲那么深,p228动态对象那里有提到一句
第一题:a[3]调用3次,p是类指针。
类
指
针
要
分
配
了
动
态
空
间
才
调
用
构
造
函
数
的
\textcolor{red}{类指针要分配了动态空间才调用构造函数的}
类指针要分配了动态空间才调用构造函数的
第二题:a,b各一次,c调用3次,p是类指针。
构造函数
蓝豹子p232
蓝豹子没有提及p233有提一句
这是两种常见的写构造函数方式
这个书上没有题,可以记一下
拷贝构造函数
蓝豹子p234:复制构造函数以一个同类对象的常量引用作为参数。
蓝豹子p234
析构函数
蓝豹子p235:在C++中,析构函数的名字是“~类名”。它没有参数也没有返回值。
常量成员函数
蓝豹子p243:因此,当把某个对象定义为常对象后,该对象只能调用常量成员函数
蓝豹子p243最后一段开头第一句:常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字
静态成员函数
蓝豹子p245:
1.在类外定义时,函数定义中不用加static;
2.更典型的方法是通过类名来调用,即“类名::静态成员函数名()”的形式。
蓝豹子p245:静态成员函数是为类服务的,它最大特点就是没有隐含的this指针
静态成员函数只能访问静态成员变量–>静态成员函数没有this指针
蓝豹子p245:静态成员函数不能访问一般的数据成员。而只能访问静态数据成员或其他静态成员函数。
补充换成问答题:
为什么静态成员函数只能访问静态成员变量。
答:1.静态成员函数只属于类本身,随着类的加载而存在,不属于任何对象,是独立存在的
2. 非 静 态 成 员 当 且 仅 当 实 例 化 对 象 之 后 才 存 在 , 静 态 成 员 函 数 产 生 在 前 , 非 静 态 成 员 函 数 产 生 在 后 , 故 不 能 访 问 \textcolor{red}{2.非静态成员当且仅当实例化对象之后才存在,静态成员函数产生在前,非静态成员函数产生在后,故不能访问} 2.非静态成员当且仅当实例化对象之后才存在,静态成员函数产生在前,非静态成员函数产生在后,故不能访问
3.内部访问静态成员用self::,而访问非静态成员要用this指针,静态成员函数没有this指针,故不能访问。
友元
蓝豹子p248:友元函数的实现是在类外部实现的,友元函数本身不属于类函数。
11.运算符重载
运算符重载方法
蓝豹子p255第一段:这个函数可以是所重载的这个类的成员函数或全局函数
蓝豹子p255:运算符的重载不能改变运算符的运算对象数。
蓝豹子p255
蓝豹子p255
蓝豹子p255:因此,把一个一元运算符重载成成员函数时,该函数没有形参
蓝豹子p255:如果将重载函数设计成类的成员函数,它的形参个数比运算符的运算对象数少1
类型转换函数
这题选A 类型转换函数不能带参数
蓝豹子p268
转化构造函数:
1.只有一个参数。
2.参数时基本类型或则其他类类型。
3. 编译器会隐式的调用转换构造函数。
12.组合与继承
蓝豹子没有提及
继承
蓝豹子p286:表12-1,口诀:private权限永不变,public继承权不变,protect继承都protect,private继承都private。
蓝豹子p286:表12-1
蓝豹子p286:表12-1
蓝豹子p286:表12-1
蓝豹子没有提及,但继承调用要记一下
多态性与虚函数
蓝豹子p299:派生类在基类的虚函数重定义时,关键字virtual可以写也可以不写。不管virtual写还是不写,该函数都被认为是虚函数
蓝豹子p297倒数第二段:当基类的指针指向不同的派生类的对象时,就会调用不同的函数,这样就实现了多态性
这题考的是动态联编,蓝豹子里面没有提及,但可以了解一下
动态联编需要满足三个条件:
1 类之间满足兼容赋值规则
2 声明虚函数
3 使用类的指针或者引用访问虚函数或者通过成员函数调用虚函数
这题考的是静态联编,蓝豹子里面没有提及
多重继承
蓝豹子里面没有提及,但是考纲8.3提到一下多重继承
解决多重继承二义性有三种办法分别是作用域分辨操作符,虚基类和同名覆盖。
关于多重继承可以产考一下这篇博客 https://www.cnblogs.com/liangxiaofeng/p/5678912.html
虚基类
这一块蓝豹子没有提及,但考纲8.4 虚基类有要求,使用要自己补一下
蓝豹子没有提及
蓝豹子没有提及
纯虚函数和抽象类
蓝豹子p301:如果一个类至少含有一个纯虚函数,则被称为抽象类。
13.模板
14.输入输出
格式化输入/输出
这题蓝豹子没有写,可以积累,蓝豹子只写了setw,在p325可以重点看看
蓝豹子只写了setw,在p325可以重点看看
蓝豹子p326那个表的最后一个:setfill 设置填充字符
这题蓝豹子没有写,可以积累,比较常见
这题蓝豹子没有写,使用运算符对数据进行格式输出时,必须要包含iomanip.h头文件。