C++ 拓展内容¶
在这一部分, 我们为你提供了 C++ 的拓展内容。 这部分内容虽然不会在招新选拔中用到, 但同样是 C++ 的精华, 是开发高性能 C++ 程序不可或缺的知识。 如果你学有余力, 请跟随本文档学习这部分内容。
本节含有以下内容:
-
继承
-
运算符重载
-
移动语义、 右值引用、 完美转发
-
RAII、 智能指针
-
C++ 面向对象模型
-
实战中的 C++ 高性能编程
继承¶
继承是 C++ 中实现代码重用和层次化设计的关键特性。通过继承,一个类(派生类)可以继承另一个类(基类)的成员变量和成员函数,从而避免重复编写代码,提高开发效率。继承还支持多层次和多重继承,使得类之间的关系更加丰富和灵活。派生类可以重写基类的虚函数,实现多态性,这是面向对象编程中动态绑定和接口重用的基础。通过合理运用类和继承,C++ 程序员能够构建出结构清晰、易于扩展和维护的软件系统。
下面, 我们继续拥抱 learncpp 网站学习这部分内容。
-
请阅读 https://www.learncpp.com/ 网站中的第 24.1 ~ 24.7 节, 学习继承相关知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 25.1 ~ 25.11 节, 学习虚函数相关知识, 然后完成网站中的本节习题。
运算符重载¶
C++ 的运算符重载(Operator Overloading)是一项强大的特性,它允许程序员重新定义或改变现有运算符的行为,使其能够用于用户定义的类型(如类和结构体)。通过运算符重载,可以使代码更加直观和易于理解,提高代码的可读性和可维护性。
下面, 我们继续拥抱 learncpp 网站学习这部分内容。
- 请阅读 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) 完美转发允许将参数按原样转发给另一个函数,保持其原有的类型(左值或右值)和常量性。这通常用于模板编程中。
请你完成以下任务:
-
请阅读 https://www.learncpp.com/ 网站中的第 22.1 ~ 22.4,学习右值引用、移动语义的相关知识。
-
请阅读
《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。
请你完成以下任务:
-
请阅读 https://www.learncpp.com/ 网站中的第 22.5 ~ 22.7 节,学习右值引用、移动语义的相关知识, 然后完成网站中的本节习题。
-
请阅读
《Effective Modern C++》
的第 4 章.
自我测评小练习¶
请完成该项目: https://github.com/courseworks/AP1400-2-HW4 , 并通过所有本地测试点。
C++ 面向对象模型¶
讲解 C++ 面向对象模型的佳作是 《Inside the C++ object model》
。 但此书无新版, 而随着 C++ 及其编译器的更新迭代, 此书的内容已不具备时效性。 因此, 这部分内容可以阅读几篇博客, 了解其思想即可, 不必太过于深究实现细节。
推荐阅读:
-
https://www.cnblogs.com/QG-whz/p/4909359.html
-
https://blog.csdn.net/luoyayun361/article/details/128850027
实战中的 C++ 高性能编程¶
这部分内容推荐看各类博客。
强烈推荐 optiver 大神的这个系列:
- https://www.youtube.com/watch?v=NH1Tta7purM
这是一位 optiver 工程师在 cppcon 上分享的他对于 C++ 开发高频交易系统的经验, 追求微秒级别的低时延, 内容非常凝练且珍贵。