C++可信科目二通关宝典

 

1.1. 整体说明

1、以前的客观题考试拆分为三个部分:科目二、三、四。

2、科目二考试主要偏向编码技能和规范遵从。

3、科目二及格分数从80%调整到70%,满分135,单选2分,多选3分。

考试必读两个文档,C++通用编程规范、C++安全编程规范,这两个规范占分数40%

其他的60%就是C++基本功了:基本语法和特性、并发编程、面向对象、标准库、c++11高级特性(占比很低,可战略放弃)

1.2. 易错真题

  1. namespace支持跨文件
  2. 匿名 Namespacestatic 都可以匿名化,也就是不导出符号。

匿名 Namespacestatic 的区别

https://blog.csdn.net/weixin_30399797/article/details/99626783

  1. 类似连乘符号的实现,可参考std::string& std::sting.append(const char*),注意传入const返回引用。
  2. 虚函数表vtbl和函数表指针vptr

(非继承的类)

如果一个类中有虚函数,则该类就有一个虚函数表。虚函数表是属于类的,不属于类对象。在编译的时候确定,存放在读数据段(不是代码段)

扫描二维码关注公众号,回复: 10062373 查看本文章

每一个实例化的类对象都有一个虚函数表指针,指向类的虚函数表。虚函数表指针属于类对象。存放在堆上或者栈上。

(继承的类)

如果基类中有虚函数,派生类实现或没实现,都有虚函数表。基类的虚函数表和派生类的虚函数表不是同一个表。

如果派生类没有重写基类的虚函数,则派生类的虚函数表和基类的虚函数表的内容是一样的。

如果派生类重写了基类的虚函数,则在派生类的虚函数表中用的是派生类的函数。

(多继承)

含有虚函数的基类有多少个,派生类就有多少个虚函数表指针,派生类有就有多少个虚函数表。

派生类有的而基类没有的虚函数,添加在第一个虚函数表中。

虚函数表的结果是* 表示还有下一个虚函数表

虚函数表的结果是0 表示是最后一个虚函数表

  1. 数组作为参数传递,下标是否该传进来,这个好像是安全规范里有,待查下。
  2. C++11新特性的使用是否规范:autoshared_ptroverridevirtual。这里有个规范要查下:子类要不要写virtual了,我们一般为了后续方便都写了,但规范可能不这么认为。
  3. memset_s能否用于对象。
  4. shared_ptr互相引用后,如何析构?
  5. operator delete operator delete[] 是不同的运算符
  6. const std::string str;  的行为是什么?Str是否还需要初始化?
  7. 枚举数组能否通过static_cast强行赋值一个枚举范围外的值?
  8. 整数向上转换 考了好几道

unsigned + short = int or short?

Int a; unsinged b; auto c = a+b;  c是什么类型

  1. 整数溢出
  2. C++内存分布

  栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。

  堆区(heap) : 一般由程序员分配释放, 若程序员不释放,在程序结束时,操作系统回收。

BSS段(Block Started by Symbol):.bss段被用来存放那些没有初始化或者初始化为0的全局变量。bss段只占运行时的内存空间而不占文件空间。在程序运行的整个周期内,.bss段的数据一直存在

全局区(静态区):全局变量和静态变量的存储是放在一块的, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 在程序序结束后由系统释放。

  DATA区(初始化的数据段):为数据分配空间,数据保存在目标文件中

  文字(只读)常量区 :常量字符串就是放在这里的。 程序结束后由系统释放

  代码段(TXT):存放函数体的二进制代码

  1. Explicit关键字

https://blog.csdn.net/ChaseRaod/article/details/77933828

https://blog.csdn.net/kezunhai/article/details/38417087?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

         C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)

由于带参数的构造函数并不会继承,所以,explicit也不会继承。

  1. 可重入方法  好像也考了不止一道

可重入:除了使用自己栈上的变量以外不依赖于任何环境

不可重入函数是否具有传递性?  A不可重入,那么调用AB是否可重入?无聊的题目,我觉得也不可重入。

  1. Inline的强制性

非强制的,编译器会自己优化

  1. 自包含

Include a.h后,不需要再include其他头文件就可以编译通过。

1.3. 没啥意义的考试题(为了考试可学,但太偏了,用不到)

  1. relloc相关题目,长度为0会怎么样?
  2. 重载带参数的new delete

new (“string”) object();

  1. 模板类生成规则,各种函数是否会生成同一个模板类:全局函数、类函数、lamda对象重载函数
  2. 运算符的优先级 int i=3;std::cout << -i++;
  1. 所有的for都可以用while代替吗?

猜你喜欢

转载自www.cnblogs.com/aoyihuashao/p/12547244.html