跳转至

C++ 拓展内容

在这一部分, 我们为你提供了 C++ 的拓展内容。 这部分内容虽然不会在招新选拔中用到, 但同样是 C++ 的精华, 是开发高性能 C++ 程序不可或缺的知识。 如果你学有余力, 请跟随本文档学习这部分内容。

本节含有以下内容:

  • 继承

  • 运算符重载

  • 移动语义、 右值引用、 完美转发

  • RAII、 智能指针

  • C++ 面向对象模型

  • 实战中的 C++ 高性能编程

继承

继承是 C++ 中实现代码重用和层次化设计的关键特性。通过继承,一个类(派生类)可以继承另一个类(基类)的成员变量和成员函数,从而避免重复编写代码,提高开发效率。继承还支持多层次和多重继承,使得类之间的关系更加丰富和灵活。派生类可以重写基类的虚函数,实现多态性,这是面向对象编程中动态绑定和接口重用的基础。通过合理运用类和继承,C++ 程序员能够构建出结构清晰、易于扩展和维护的软件系统。

下面, 我们继续拥抱 learncpp 网站学习这部分内容。

  1. 请阅读 https://www.learncpp.com/ 网站中的第 24.1 ~ 24.7 节, 学习继承相关知识, 然后完成网站中的本节习题。

  2. 请阅读 https://www.learncpp.com/ 网站中的第 25.1 ~ 25.11 节, 学习虚函数相关知识, 然后完成网站中的本节习题。

运算符重载

C++ 的运算符重载(Operator Overloading)是一项强大的特性,它允许程序员重新定义或改变现有运算符的行为,使其能够用于用户定义的类型(如类和结构体)。通过运算符重载,可以使代码更加直观和易于理解,提高代码的可读性和可维护性。

下面, 我们继续拥抱 learncpp 网站学习这部分内容。

  1. 请阅读 https://www.learncpp.com/ 网站中的第 21.1 ~ 21.14 节,学习运算符重载的相关知识, 然后完成网站中的本节习题。

自我测评小练习

请完成该项目: https://github.com/courseworks/AUT_AP_2024_Spring_HW3 , 并通过所有本地测试点。

移动语义、 右值引用、 完美转发

C++ 11 引入了几个重要的特性:移动语义(Move Semantics)、右值引用(Rvalue References)和完美转发(Perfect Forwarding)。这些特性极大地增强了 C++ 的性能和灵活性。

  • 移动语义(Move Semantics) 移动语义允许将资源从一个对象转移到另一个对象,而不是进行深拷贝。这通常用于处理动态分配的内存或其他资源,可以显著提高性能。

  • 右值引用(Rvalue References) 右值引用是 C++11 引入的一种新的引用类型,用于表示临时对象(右值)。右值引用使用 && 表示。

  • 完美转发(Perfect Forwarding) 完美转发允许将参数按原样转发给另一个函数,保持其原有的类型(左值或右值)和常量性。这通常用于模板编程中。

请你完成以下任务:

  1. 请阅读 https://www.learncpp.com/ 网站中的第 22.1 ~ 22.4,学习右值引用、移动语义的相关知识。

  2. 请阅读 《Effective Modern C++》 的第 5 章. 该书下载连接: https://libgen.is/book/index.php?md5=AE6A1D182CFED7CA12D9665DB8F8987E .

RAII、 智能指针

RAII(Resource Acquisition Is Initialization)和智能指针是 C++ 中用于管理资源的重要概念和工具。它们有助于确保资源在对象的生命周期内正确分配和释放,从而避免内存泄漏和资源泄漏。

  • RAII(Resource Acquisition Is Initialization) RAII 是一种编程惯用法,通过将资源的获取和释放与对象的生命周期绑定,确保资源在对象构造时分配,在对象析构时释放。RAII 的核心思想是利用 C++ 对象的生命周期管理机制(构造函数和析构函数)来管理资源。

  • 智能指针(Smart Pointers) 智能指针是 C++ 11 引入的一种工具,用于自动管理动态分配的内存。智能指针利用 RAII 原则,在对象构造时获取资源,在对象析构时释放资源。C++ 标准库提供了三种主要的智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。

请你完成以下任务:

  1. 请阅读 https://www.learncpp.com/ 网站中的第 22.5 ~ 22.7 节,学习右值引用、移动语义的相关知识, 然后完成网站中的本节习题。

  2. 请阅读 《Effective Modern C++》 的第 4 章.

自我测评小练习

请完成该项目: https://github.com/courseworks/AP1400-2-HW4 , 并通过所有本地测试点。

C++ 面向对象模型

讲解 C++ 面向对象模型的佳作是 《Inside the C++ object model》。 但此书无新版, 而随着 C++ 及其编译器的更新迭代, 此书的内容已不具备时效性。 因此, 这部分内容可以阅读几篇博客, 了解其思想即可, 不必太过于深究实现细节。

推荐阅读:

  1. https://www.cnblogs.com/QG-whz/p/4909359.html

  2. https://blog.csdn.net/luoyayun361/article/details/128850027

实战中的 C++ 高性能编程

这部分内容推荐看各类博客。

强烈推荐 optiver 大神的这个系列:

  • https://www.youtube.com/watch?v=NH1Tta7purM

这是一位 optiver 工程师在 cppcon 上分享的他对于 C++ 开发高频交易系统的经验, 追求微秒级别的低时延, 内容非常凝练且珍贵。