C++ 基础知识¶
在这一部分, 你需要学会 C++ 的基础语法, 掌握使用 C++ 编程语言编写中小型程序的能力。
本节含有以下内容:
-
C++ 简要介绍
-
C++ 基础语法
-
类
-
模板
-
STL
C++ 简要介绍¶
C++ 作为一门多范式编程语言,自 1985 年由 Bjarne Stroustrup 设计以来,便以其高效、灵活和强大的特性在软件开发领域占据重要地位。它不仅支持传统的面向过程编程,还全面拥抱面向对象编程,允许开发者通过类和对象构建复杂的软件结构。C++ 的语法继承自 C 语言,因此具有接近硬件的效率,同时提供了丰富的标准库,包括 STL(标准库),极大地简化了数据结构和算法的实现。此外,C++ 还引入了模板元编程,使得编译时计算成为可能,进一步提升了程序的性能和灵活性。尽管 C++ 的学习曲线较为陡峭,但其广泛应用于系统编程、游戏开发、嵌入式系统和高性能计算等领域,证明了其在现代编程语言中的不可或缺性。
在本指南中并不会直接提供详细的知识讲解, 而是多以简要介绍和引用前人著作的形式呈现。 因此, 请你阅读每节介绍后, 继续阅读链接中的文章或书籍对应章节, 再完成所给习题, 从而真正掌握这门优雅而高性能的编程语言。
C++ 基础语法¶
C++ 的基础语法继承自 C 语言, 如果你学过 C 语言, 这部分对你来说一定不是什么难事。 下面, 让我们拥抱 learncpp 这个精彩绝伦的 C++ 教学网站, 来学习 C++ 的基础语法。 如果你对这部分已经很熟悉, 请放心地跳过本节或以下任何内容!
-
请阅读 https://www.learncpp.com/ 网站中的第 1.1 ~ 1.11 节, 按照网站中的指引在自己的计算机上编写 C++ 程序, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 2.1 ~ 2.13 节,学习函数、宏、头文件的知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 3.1 ~ 3.10 节, 学习如何调试 C++ 程序, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 4.1 ~ 4.12 节, 学习数据类型的知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 5.1 ~ 5.9 节, 学习字符串、 常量相关知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 6.1 ~ 6.7 节, 学习运算符相关知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 7.1 ~ 7.8 节, 学习变量的生存期、作用域相关知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 8.1 ~ 8.12 节, 学习程序控制流相关知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 10.1 ~ 10.8 节, 学习类型转换和类型推导相关知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 12.1 ~ 12.13 节, 学习指针、引用类型相关知识, 然后完成网站中的本节习题。
-
请阅读 https://www.learncpp.com/ 网站中的第 13.1 ~ 13.10 节, 学习结构体和枚举类型相关知识, 然后完成网站中的本节习题。
类¶
C++ 中的类是面向对象编程的核心,它允许程序员定义自己的数据类型,并通过成员函数操作这些数据。类将数据(成员变量)和操作数据的方法(成员函数)封装在一起,提供了数据隐藏和抽象的机制,增强了代码的可维护性和安全性。通过访问修饰符(如 public、private 和 protected ),开发者可以控制类成员的可见性,实现信息的隐藏和保护。
下面, 我们继续拥抱 learncpp 网站学习这部分内容。
- 请阅读 https://www.learncpp.com/ 网站中的第 14.1 ~ 14.15, 15.1 ~ 15.9 节, 学习类的相关知识, 然后完成网站中的本节习题。
自我测评小练习¶
请完成该项目: https://github.com/courseworks/AP1401-2-HW3 , 并通过所有本地测试点。
模板¶
C++ 模板(Templates)是 C++ 语言的一项强大特性,它允许程序员编写与类型无关的代码,从而实现代码的复用和泛化。模板是 C++ 泛型编程的基础,它使得函数和类能够处理多种不同类型的数据,而无需为每种类型单独编写代码。
下面, 我们继续拥抱 learncpp 网站学习这部分内容。
- 请阅读 https://www.learncpp.com/ 网站中的第 26.1 ~ 26.6 节,学习模板的相关知识, 然后完成网站中的本节习题。
STL¶
C++ 标准模板库(Standard Template Library,简称 STL)是 C++ 标准库的核心组成部分,为开发者提供了高效、灵活且可重用的数据结构和算法。STL 的设计哲学基于泛型编程,通过模板技术实现类型无关性,使得数据结构和算法能够处理各种不同类型的数据。STL 主要包括以下几个部分:
-
容器(Containers): STL 提供了多种容器类,如向量(vector)、链表(list)、双端队列(deque)、集合(set)、映射(map)等,用于存储和管理数据。这些容器类提供了丰富的成员函数,支持插入、删除、查找等操作,满足不同场景下的需求。
-
迭代器(Iterators): 迭代器是 STL 的精髓之一,它提供了一种统一的方式来遍历容器中的元素。迭代器类似于指针,但更加抽象和灵活,支持前向、后向以及随机访问等多种遍历方式。通过迭代器,开发者可以编写与容器类型无关的通用代码。
-
算法(Algorithms): STL 提供了一套丰富的算法库,包括排序、查找、复制、变换等常用操作。这些算法通过迭代器与容器进行交互,实现了与容器类型的解耦,使得算法可以在不同类型的容器上复用。
-
适配器(Adapters): STL 提供了多种适配器,用于改变容器或迭代器的行为。例如,栈(stack)和队列(queue)就是通过适配器实现的,它们在内部使用其他容器(如 deque)来存储数据,但对外提供了特定的接口。
STL 的设计理念是“一次编写,到处使用”,它通过模板技术实现了高度的泛型化,使得代码更加简洁、高效和可维护。无论是处理复杂的数据结构,还是实现高效的算法,STL 都是 C++ 开发者不可或缺的利器。
接下来, 请阅读 https://www.geeksforgeeks.org/the-c-standard-template-library-stl/ , 并通过该网址的超链接学习各个 STL 容器。
自我测评小练习¶
阅读完毕后, 请使用 C++ 完成以下习题: (如果你不熟悉接口, 请随时向 chatgpt 提问!)
习题:学生成绩管理系统
任务描述:
你将编写一个简单的学生成绩管理系统,使用 C++ STL 来存储和管理学生的信息。系统需要实现以下功能:
添加学生信息:输入学生的姓名和成绩,将其存储在系统中。
显示所有学生信息:按添加顺序显示所有学生的姓名和成绩。
查找学生信息:根据学生姓名查找并显示其成绩。
计算平均成绩:计算并显示所有学生的平均成绩。
显示成绩排名:按成绩从高到低显示所有学生的姓名和成绩。
要求:
使用 std::vector 存储学生信息。
使用 std::pair 或自定义结构体来表示学生信息(姓名和成绩)。
使用 std::find_if 或其他合适的算法进行查找操作。
使用 std::sort 进行排序操作。
拓展内容¶
现在你已经掌握了 C++ 的相关基础知识。 如果你希望对 C++ 有更深入的了解, 请进一步学习下一节 C++拓展内容。