918c++选择和填空题归纳总结【全部更完】

918选择和填空题

这份文档就是对c++中常见易错的选择题进行归类整理,按照蓝豹子的目录进行归类,文档中提及的蓝豹子就是《C++程序设计思想与方法》慕课版第3版 人民邮电出版社
在这里插入图片描述

持续更新中ing

1.绪论

image-20211204184825172

image-20211210184400309

image-20211210185206774

2.程序的基本组成

常量

image-20211210181658580

蓝豹子p17:unsigned int的字节是4

image-20211204164336288

这里主要原因是常量字符串必须初始化,具体解释可以开蓝豹子p24有一句话“const表示所定义的字符…”

数据类型

image-20211204174734118

这题蓝豹子没有,但是字符串处理函数比较常见,可以积累。

赋值运算符

image-20211204175002806

蓝豹子p30,但没有讲单目运算符是什么,可是这个也比较常见

单目运算是指运算符包括算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符。:- = +
双目运算符:-- == ++
三目运算符,又称条件运算符,也叫多目运算符: b = (a > c) ? a : c;

3.分支程序设计

4.循环程序设计

image-20211210184427580

蓝豹子p63:break可以用于switch中而continue只能用于循环体中,这里很多人可能没想到

5.数组

image-20211210181808986

书中没有提及,但比较重要

6.函数

函数调用

image-20211204164649126

蓝豹子p109:实际参数和形式参数是一一对应的,它们的个数,排列顺序要完全相同,类型要完全兼容。

image-20211210182310779

蓝豹子p109:单向传递和双向传递也叫值传递和引用传递,值传递在函数中对形式参数的任何修改对实际参数都没有影响

函数变量

image-20211204170430834

没有在蓝豹子里找到:在C++程序中,如果我没没有对函数的类型进行说明的话,那么函数的默认类型是int类型的,也就是说函数必须返回一个int型的返回值。

7.指针

image-20211208213844168

第一题:a[3]调用3次,p是类指针。
类指针要分配了动态空间才调用构造函数的
第二题:a,b各一次,c调用3次,p是类指针。

image-20211210185435897

类指针要分配了动态空间才调用构造函数的

动态内存分配

image-20211206170725403

蓝豹子p158:通过new操作可以申请一个动态的一维数组;要收回某个动态变量,可以使用delete操作。

引用类型与函数

image-20211206174403497

蓝豹子p168

常量指针

这一块书上没有,但考试试卷难道逐年增加,以防万一他考

image-20211210183701228

这是一个常量指针,不能在指向别的变量,但指向的值可以修改

image-20211210183645394

8.结构体

9.模块化开发

image-20211204175727438

这题蓝豹子没有讲

10.创建新的类型

类的定义

image-20211204170928561

蓝豹子p224中间有一段的最后一句话:如果没有指明访问特性,该成员默认认为是private。

image-20211206162628794

这题比较综合,但是都是各个部分最基础的考点!

对于类中不能初始化变量的个人理解:

类的定义实际相当与类型声明,并没有分配存储空间,初始化的数据哪里放? 类实例化以后才会有实体存储地址及空间。

对象的使用

image-20211204172745369

蓝豹子没有讲那么深,p228动态对象那里有提到一句

第一题:a[3]调用3次,p是类指针。
类 指 针 要 分 配 了 动 态 空 间 才 调 用 构 造 函 数 的 \textcolor{red}{类指针要分配了动态空间才调用构造函数的}
第二题:a,b各一次,c调用3次,p是类指针。

构造函数

image-20211205213258787

蓝豹子p232

image-20211204184318872

蓝豹子没有提及p233有提一句

image-20211204184655193

这是两种常见的写构造函数方式

image-20211210185703890

这个书上没有题,可以记一下

拷贝构造函数

image-20211205212125495

蓝豹子p234:复制构造函数以一个同类对象的常量引用作为参数。

image-20211210185304661

image-20211210185035490

image-20211205213132237

蓝豹子p234

image-20211210185935658

析构函数

image-20211205212237168

蓝豹子p235:在C++中,析构函数的名字是“~类名”。它没有参数也没有返回值。

常量成员函数

image-20211210185606305

image-20211206165133349

蓝豹子p243:因此,当把某个对象定义为常对象后,该对象只能调用常量成员函数

image-20211204170642082

蓝豹子p243最后一段开头第一句:常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字

静态成员函数

image-20211206164332525

蓝豹子p245:

1.在类外定义时,函数定义中不用加static;

2.更典型的方法是通过类名来调用,即“类名::静态成员函数名()”的形式。

image-20211210185629599

image-20211206162822704

蓝豹子p245:静态成员函数是为类服务的,它最大特点就是没有隐含的this指针

静态成员函数只能访问静态成员变量–>静态成员函数没有this指针

image-20211204171352446

蓝豹子p245:静态成员函数不能访问一般的数据成员。而只能访问静态数据成员或其他静态成员函数。

补充换成问答题:

为什么静态成员函数只能访问静态成员变量。

答:1.静态成员函数只属于类本身,随着类的加载而存在,不属于任何对象,是独立存在的

2. 非 静 态 成 员 当 且 仅 当 实 例 化 对 象 之 后 才 存 在 , 静 态 成 员 函 数 产 生 在 前 , 非 静 态 成 员 函 数 产 生 在 后 , 故 不 能 访 问 \textcolor{red}{2.非静态成员当且仅当实例化对象之后才存在,静态成员函数产生在前,非静态成员函数产生在后,故不能访问} 2.访

3.内部访问静态成员用self::,而访问非静态成员要用this指针,静态成员函数没有this指针,故不能访问。

友元

image-20211210184015892

蓝豹子p248:友元函数的实现是在类外部实现的,友元函数本身不属于类函数。

11.运算符重载

运算符重载方法

image-20211206193012756

蓝豹子p255第一段:这个函数可以是所重载的这个类的成员函数或全局函数

image-20211204180117210

蓝豹子p255:运算符的重载不能改变运算符的运算对象数。

image-20211206174617314

蓝豹子p255

image-20211206175011782

蓝豹子p255

image-20211206175101999

蓝豹子p255:因此,把一个一元运算符重载成成员函数时,该函数没有形参

image-20211206183344315

蓝豹子p255:如果将重载函数设计成类的成员函数,它的形参个数比运算符的运算对象数少1

类型转换函数

image-20211206170253649
这题选A 类型转换函数不能带参数

蓝豹子p268

转化构造函数:

1.只有一个参数。

2.参数时基本类型或则其他类类型。

3. 编译器会隐式的调用转换构造函数。

12.组合与继承

image-20211204184134440

蓝豹子没有提及

继承

image-20211206171816771

image-20211210183209419

image-20211206162050328

蓝豹子p286:表12-1,口诀:private权限永不变,public继承权不变,protect继承都protect,private继承都private。

image-20211206170921043

蓝豹子p286:表12-1

image-20211206171007304

蓝豹子p286:表12-1

image-20211206171043052

蓝豹子p286:表12-1

image-20211206174750264

蓝豹子没有提及,但继承调用要记一下

多态性与虚函数

image-20211206164636955

蓝豹子p299:派生类在基类的虚函数重定义时,关键字virtual可以写也可以不写。不管virtual写还是不写,该函数都被认为是虚函数

image-20211205212745611

蓝豹子p297倒数第二段:当基类的指针指向不同的派生类的对象时,就会调用不同的函数,这样就实现了多态性

image-20211204173710988

image-20211210184918160

这题考的是动态联编,蓝豹子里面没有提及,但可以了解一下

动态联编需要满足三个条件:
1 类之间满足兼容赋值规则
2 声明虚函数
3 使用类的指针或者引用访问虚函数或者通过成员函数调用虚函数

image-20211204175214988

这题考的是静态联编,蓝豹子里面没有提及

多重继承

image-20211206163759088

蓝豹子里面没有提及,但是考纲8.3提到一下多重继承

解决多重继承二义性有三种办法分别是作用域分辨操作符,虚基类和同名覆盖。

关于多重继承可以产考一下这篇博客 https://www.cnblogs.com/liangxiaofeng/p/5678912.html

虚基类

这一块蓝豹子没有提及,但考纲8.4 虚基类有要求,使用要自己补一下

image-20211204183925044

蓝豹子没有提及

image-20211206165410705

蓝豹子没有提及

纯虚函数和抽象类

image-20211206170415683

image-20211205213446141

蓝豹子p301:如果一个类至少含有一个纯虚函数,则被称为抽象类。

13.模板

14.输入输出

格式化输入/输出

image-20211204173825365

这题蓝豹子没有写,可以积累,蓝豹子只写了setw,在p325可以重点看看

image-20211206193132662

蓝豹子只写了setw,在p325可以重点看看

image-20211204174307160

蓝豹子p326那个表的最后一个:setfill 设置填充字符

image-20211206175213151

这题蓝豹子没有写,可以积累,比较常见

image-20211210185458351

这题蓝豹子没有写,使用运算符对数据进行格式输出时,必须要包含iomanip.h头文件。

  • 25
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 在C/C++编程语言中,内存是一个非常重要的概念。内存是计算机用于存储和访问数据的地方,它可以被看作是一个巨大的存储器数组,每个元素都有一个独特的地址。 在C/C++中,我们可以使用指针来访问和操作内存。指针是一个特殊类型的变量,它存储了一个内存地址。通过指针,我们可以间接访问和修改内存中的数据。 当我们在程序中声明一个变量时,系统会为该变量分配一块内存空间,并将其地址存储在变量名中。我们可以通过使用变量名来访问和修改该内存空间中的值。 另外,我们可以使用动态内存分配函数来在运行时动态地分配内存。这在需要在程序中创建变量长度的数组或者临时存储空间时非常有用。动态内存分配函数包括malloc、calloc和realloc。在使用这些函数分配内存后,我们需要记得通过使用free函数来释放这些内存空间。 值得注意的是,C/C++中的内存管理是程序员的责任。这意味着我们在使用指针和动态内存分配函数时需要小心,以避免内存泄漏和悬挂指针等问题。我们需要确保我们在使用内存后及时释放它,以避免浪费内存资源。 总结来说,C/C++中的内存是一个重要的概念,我们可以使用指针来访问和操作内存。通过动态内存分配函数,我们可以在程序运行时动态地分配内存。然而,我们也需要负责管理内存,以避免出现内存泄漏和悬挂指针等问题。 ### 回答2: C/C++中的内存填空题是指填写一段代码,成特定的内存操作。以下是一个例子: ```c #include <stdio.h> int main() { int array[5]; // 声明一个包含5个整数的数组 int *p = array; // 声明一个指向数组首元素的指针 // 使用循环将数组中的元素赋值为0到4 for (int i = 0; i < 5; i++) { *(p + i) = i; } // 打印数组中的元素 for (int i = 0; i < 5; i++) { printf("%d ", array[i]); } return 0; } ``` 在这个例子中,我们声明了一个包含5个整数的数组`array`,然后使用指针`p`指向数组的首元素。接下来,通过循环遍历数组,利用指针`p`对数组元素进行赋值操作,赋值的值为数组下标。最后,再通过循环遍历数组,利用数组`array`打印出各个元素的值。这段代码展示了C/C++中的指针和数组的使用,以及对内存空间的操作。 ### 回答3: C/C++ 内存填空题一般涉及指针和内存管理的知识。下面给出一个例子以300字来回答: 以下是一道关于C/C++ 内存填空题的解答。 ```c #include <stdio.h> #include <stdlib.h> int main() { int* ptr = (int*)malloc(sizeof(int)); int* arr = (int*)calloc(5, sizeof(int)); *ptr = 10; for (int i = 0; i < 5; i++) { arr[i] = i; } printf("Ptr: %d\n", *ptr); printf("Arr: "); for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); } printf("\n"); free(ptr); free(arr); return 0; } ``` 上述代码中包含了两个关于内存的填空处,首先是通过`malloc(sizeof(int))`来分配存储 int 类型数据的内存空间,并将其地址赋值给`ptr`指针;另一个是通过`calloc(5, sizeof(int))`来分配存储 5 个 int 类型数据的连续内存空间,并将其地址赋值给`arr`指针。 接着通过`*ptr = 10`给指针 `ptr` 所指向的内存位置赋值为 10。并用一个 for 循环给数组 `arr` 赋值为 0 到 4。 最后通过`printf`打印结果。Ptr 输出为 10, Arr 输出为 0 1 2 3 4,表示内存填空处正确。 最后需要调用`free`函数手动释放内存,以避免内存泄漏。 在实际编程中,动态内存分配是一个常见的操作,合理地申请内存并及时释放内存对于提高程序的性能和效率十分重要。因此对于这类题目要熟悉`malloc`、`calloc`、`realloc`、`free`等函数的使用规则和注意事项,以及指针的正确使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值