C++ 八股学习笔记。

1.C++ 新特性。

C++ 的新特性主要是 C++11 开始的

  1. 引入了智能指针,​基于 RAI 管理动态资源

  2. 右值引用和移动语义,​可以减少深拷贝操作,​对于临时对象的深拷贝

  3. 类型推导,​auto 等类型推导机制

  4. 使用 lambda 表达式,​结合容器和算法,​非常便利

  5. 就是引入了多线程库

2.在什么情况下,析构函数需要声明成虚函数?

答,在有用基类的指针或者引用绑定子类的对象,通过基类的指针或者引用释放子类对象,析构此类对象的场景需要声明成虚析构函数,否则它可能不能够正确的析构。

3.函数重载和函数重写的区别。

函数重载和函数重写,它们是静态多态和动态多态。函数重载通过函数的参数类型、参数个数以及参数顺序来区分,然后在编译期间进行类型匹配。函数的返回值类型不作为匹配的签名。函数重写是指父类的虚函数在子类中被重写,它们的签名是一致的,可以通过基类或者引用或者指针去调用子类的对象,产生不同的行为,是在运行期间绑定,所以叫动态绑定。

4.C++ 的虚函数是怎么实现的?或者说多态是怎么实现的?

这里主要说的是动态多态,它是通过虚函数表实现的。对于含有虚函数的类,它的调用是通过虚函数指针,每一个类有一张虚函数表存储虚函数指针。然后具有虚函数的类,它的对象在实例化过程中会有一个虚函数表指针。在调用的过程中,根据虚函数表指针查找虚函数表,根据虚函数表查找虚函数的指针,然后根据虚函数指针去具体的进行调用。

拥有虚函数的类,它的对象在实例化之后会多一个指针的大小。

5.讲解一下关于智能指针,你知道的内容。

所谓智能指针是一种模板,它能够基于 AI 去管理指针,避免我们手动的去释放资源,造成内存泄露。智能指针有 unique_ptr、 shared_ptr 和 weak_ptr。unique_ptr 只有一个变量去访问空间,它只能移动,不能被拷贝。shared_ptr 具有线程安全的引用技术,当引用技术不为 0 时,空间不会被释放。每一个 shared_ptr 增加一个引用技术。weak_ptr 和 shared_ptr 可以结合起来使用,它不增加引用技术。避免了 shared ptr 循环引用的问题。

这里有一个拓展,就是线程安全的引用技术是线程安全的,但是 shared_ptr 变量本身以及管理的那块堆上的空间不是线程安全的。

6.讲解一下 C++ 的容器的使用场景。

对于 C++ 的容器分成序列式容器和关联式容器。​在序列式容器里,​vector 是首选,​它支持高效的在队尾的插入和删除,​支持随机访问。​但是在于中间的插入和删除效率不是那么高,​在这种情况下,​如果是频繁的在中间插入和删除,​就使用 list

然后除此之外,​如果是使用关联容器,​如果是正常的查找,​就使用 map 或者 set。​如果是只是追求 O1 的访问,​可以使用 unordered map 和 unordered set。​在具体的特性下,​比如说先进先出或者后进先出的场景,​再去使用。​栈或者队列

7.在什么场景下会使用模板?

模板是 C++ 实现泛型编程的核心。​在 C++ 的标准库设计中,​比如说容器是使用模板,​算法如 sort 是使用模板,​迭代器是使用模板。​在实现过程中,​对于通用的工具和库要可以用模板去实现,​但是对于日常或者工程化的代码,​就不要滥用模板。​模板会在编译过程中根据类型生成具体的代码

8.静态链接和动态链接的区别是什么?

静态链接和动态链接的区别主要是库代码的编译时机、被复制到可执行代码的时机以及共享方式不同。静态链接在编译期间就把库代码复制到可执行文件中,多个程序中可能重复包含,它的文件比较大。而动态链接是在编译期只记录库的依赖关系,在运行时再去加载具体的库,多个程序的动态库可以共享。它的优点是节省空间,但是缺点是可能会出现动态库缺失或者版本不兼容的问题。

9.C 语言的 Struct 和 C++ 的 Class,它们的区别是什么?

C++ 的类提供了类型访问控制。C++ 分成 public、 protected 和 private,而 C 语言没有这些。C++ 的类具有静态成员变量或者静态成员函数,还有成员函数。而 C 的类是不具有成员函数的。然后对于 Struct,C++ 的默认是 public 的,而 Class 默认是 private 的。

这里感觉对于 C++ 的新特性是考察最多的,然后主要是 5 个类型推导、Lambda 表达式、多线程、智能指针和右值引用和移动语义。

相关推荐
蒸蒸yyyyzwd4 天前
秋招学习笔记 Day 64 之准备系统软件开发工程师岗位笔记
c++·八股
蒸蒸yyyyzwd6 天前
秋招学习笔记 day62
八股
蒸蒸yyyyzwd7 天前
秋招学习笔记 day61
八股
蒸蒸yyyyzwd9 天前
后端学习笔记 day58
c++·八股
蒸蒸yyyyzwd11 天前
秋招学习笔记 day54
八股
蒸蒸yyyyzwd12 天前
计网八股笔记
八股
蒸蒸yyyyzwd14 天前
八股学习笔记
八股