C++ 教程

C++ 是当今软件开发中最经典、应用最广泛的编程语言之一。平时我们在电脑上玩的大型游戏、常用的办公和设计软件,乃至操作系统底层和智能硬件,背后都有 C++ 的身影。

哪怕你之前完全没有接触过编程,也可以直接从这里开始。咱们这个教程以现代、好用的 C++20 标准为主线,由浅入深地讲解 C++ 的各个方面,并提供丰富的可运行示例,带你一步步打牢编程基础。

C++ 是什么?

简单来说,C++ 是一门用来编写计算机程序的编程语言。所谓的 “编程语言”,其实就是人和计算机之间的一套 “沟通规则”:我们按照这套规则写出代码,再交给编译器翻译成计算机可以执行的机器指令,如下图所示。

C++ 代码编译为机器指令的过程

很多小伙伴第一次听到 C++ 这个名字,都会好奇后面的两个加号是什么意思。其实,C++ 是由本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)于 1979 年在贝尔实验室开始设计开发的。

它最初是在 C 语言的基础上扩充而来的。在 C 语言中,“++” 表示在原值基础上加 1,所以 “C++” 形象来说就是 “比 C 语言更进一步” 的意思。至于这两门语言具体有哪些不同,我们会在下一节 “C++ 与 C 的区别” 中展开介绍。

经过 40 多年的发展,C++ 已经成为一门非常成熟的主流语言。在 TIOBE 编程语言排行榜上(如下图所示),C++ 常年稳居前三名,与 Python、C、Java 一起成为现代软件开发中最重要的基础语言。

C++ 在 TIOBE 的排名

提示 TIOBE 是编程业界权威的编程语言排行榜,用来反映各门语言的流行趋势。该榜单排名主要基于全球有经验的程序员、相关课程以及第三方厂商的数量。

C++ 能干什么?

在正式开始学习之前,很多小伙伴可能会关心一个很实际的问题:学了 C++ 到底能做什么?简单来说,C++ 是一门通用编程语言。只要是对运行速度、硬件资源控制或项目规模有较高要求的领域,几乎都能看到它的身影。

在实际开发中,C++ 主要用于以下 5 个方面:

  • 大型游戏与引擎开发:像常见的虚幻引擎(Unreal Engine)以及众多大型端游、主机游戏,需要实时处理复杂的 3D 画面渲染和物理碰撞,主要模块都是使用 C++ 开发的。
  • 大型桌面客户端软件:比如图像处理的 Photoshop、视频剪辑的 Premiere、日常办公的 Office 和 WPS,以及工业设计常用的 CAD 软件,底层都大量用到了 C++。
  • 操作系统与基础软件:比如 Windows 操作系统的大量底层模块、Chrome 和 Edge 浏览器的渲染引擎,以及 MySQL 等主流数据库软件,底层也都是通过 C++ 实现的。
  • 嵌入式与智能硬件:比如新能源汽车的车载系统、自动驾驶控制模块、工业机器人和无人机,这类设备非常看重运行效率和内存控制,广泛使用 C++ 编写底层程序。
  • 人工智能底层与高性能计算:在人工智能领域,虽然上层常使用 Python 调用接口,但像 PyTorch、TensorFlow 等深度学习框架以及大模型推理引擎的底层计算模块,实际上都是使用 C++ 编写的。

C++ 在游戏引擎、桌面软件、系统软件、智能硬件与 AI 底层的五大应用领域

现在的编程语言非常多,每一种语言都有各自适合的使用场景。比如制作网页交互效果通常会用到 JavaScript,写十几行脚本临时处理表格数据使用 Python 会省事得多。而在追求高执行效率、底层硬件控制和大型项目开发的场景下,C++ 则是不可替代的主力语言。

C++ 有什么特点?

为什么前面提到的这些领域都离不开 C++ 呢?这主要是因为 C++ 具有以下 4 个特点:

  • 运行速度快:C++ 是一门编译型语言,编译器会把写好的源代码直接翻译成机器指令,生成可直接运行的本地程序,因此执行效率非常高。
  • 类型检查严格:在 C++ 中,整数、小数、文本都有各自明确的类型,专门用来存整数的地方不能随便塞进一段文字。编译器在编译阶段就能帮我们把这类类型不匹配的错误提前找出来。
  • 兼顾底层控制与大型开发:C++ 既可以像 C 语言那样直接管理内存和硬件资源,又提供了函数、类与对象等工具,方便我们将几万行甚至几十万行的大型项目组织得清晰有序。
  • 标准库丰富且支持跨平台:现代 C++ 自带了实用的标准库,像日常开发常用的字符串、动态数组和排序算法等都能直接拿来使用。而且同一套标准代码可以在 Windows、Linux、macOS 等不同操作系统上编译运行。

C++ 的 4 个主要技术特点

第一个 C++ 程序

编程语言如果只看概念,很容易觉得抽象。在搭建本地开发环境之前,我们先来看一段最简单的 C++ 代码,直观认识一下 C++ 程序长什么样。

示例 1:输出一句话

#include <iostream>                // 引入输入输出工具

int main() {                       // 程序入口
    std::cout << "Hello, C++!";    // 向屏幕输出文字
    return 0;                      // 程序正常结束
}

运行结果如下。

Hello, C++!

分析:

上面这个例子虽然只有短短几行,但已经包含了一个 C++ 程序最基本的骨架。现在不需要死记硬背每一个符号,先把各部分的作用认个脸熟即可。代码中每一行 // 后面的文字是注释,用来给我们自己看说明,编译器在编译时会自动忽略它们。

第一行 #include <iostream> 用来引入标准输入输出工具箱,注意它的末尾不需要加分号。其中 iostream 是 “input output stream(输入输出流)” 的缩写,只有先把这个工具箱引入进来,后面才能把文字显示到屏幕上。

接下来的 int main() { ... } 是整个 C++ 程序的入口。不管一份代码有多少行,程序运行时总是从 main() 后面的左花括号 { 开始,一行一行往下执行,直到遇到右花括号 } 结束。

花括号里的 std::cout << "Hello, C++!"; 是一条输出语句,用来把双引号内的文字打印到屏幕上。其中 std 是 “standard(标准)” 的缩写,:: 表示 “里面的”,合起来就是调用标准库里的 std::cout 输出工具。

输出语句中的 << 可以看作一个向左指的箭头,表示把右边的字符串 "Hello, C++!" 输送给左边的 std::cout 显示出来。

行尾的英文分号(;)相当于中文里的句号,用来表示这一条语句结束了。这里要特别注意,代码里的分号、双引号、括号等符号都必须在英文输入法下输入,不能写成中文标点,否则编译时会直接报错。

最后一行 return 0; 与 main() 前面的 int(整数)相呼应,代表程序正常执行结束,并向操作系统返回整数 0。

看懂基本结构后,如果想要往屏幕上连续输出两行文字,应该怎么写呢?下面我们再来看一个例子。

示例 2:输出多行文字

#include <iostream>

int main() {
    std::cout << "欢迎来到绿叶网!\n";
    std::cout << "一起从零开始学 C++。\n";
    return 0;
}

运行结果如下。

欢迎来到绿叶网!
一起从零开始学 C++。

分析:

在这个例子中,我们在 main() 的花括号内连续写了两行 std::cout 语句,程序会按照从上往下的顺序依次输出这两句话。其中,每句话末尾的 \n 是转义字符,表示 “换行”,作用相当于在键盘上按了一下 Enter 键,让后面的内容换到下一行显示。

需要注意的是,在代码里把 std::cout 分成两行写,并不会让屏幕上的输出结果自动换行。对于这个例子来说,如果把第一句话末尾的 \n 去掉,也就是写成下面这样:

std::cout << "欢迎来到绿叶网!";
std::cout << "一起从零开始学 C++。\n";

运行结果如下。

欢迎来到绿叶网!一起从零开始学 C++。

从结果可以看出,去掉 \n 之后,两句话就会首尾紧贴着挤在同一行显示。因此,平时只要希望输出完一段内容后换到下一行,记得在字符串末尾加上 \n 才行。

C++ 学习路线

C++ 的知识点比较多,如果把陈旧语法和复杂的底层细节全都堆在一起,初学者很容易越学越乱。为了减轻学习负担,我们将后面的学习内容按照由浅入深的顺序划分为以下 4 个阶段:

  • 第 1 阶段(C++ 基础):先完成本地开发环境搭建,随后系统学习变量、数据类型、输入输出、流程控制、数组、字符串、vector 容器、函数以及引用与指针,打牢编程基本功。
  • 第 2 阶段(面向对象):学习结构体、类与对象、继承与多态,并掌握现代 C++ 的内存管理与智能指针。
  • 第 3 阶段(模板与 STL):学习函数模板与类模板,掌握 STL 标准库中常用的容器、迭代器与算法工具。
  • 第 4 阶段(进阶与实战):学习多文件编程与 CMake 构建、异常处理与调试、文件读写、日期时间、现代 C++ 实用特性以及多线程编程。

很多小伙伴在刚开始学编程时,容易有眼高手低的习惯,觉得代码看懂了就可以了。其实编程是一门手艺活,光看懂了没太大意义,只有自己亲手敲出来、跑通了才算真正掌握。等后面搭好本地开发环境之后,对于每一个例子,建议大家都动手敲一遍、改一改。

常见问题

1. 完全零基础,英语或数学一般,也能学会 C++ 吗?

完全可以。写代码并不是去写英语文章,C++ 里的常用关键字一共也就几十个简单单词,比如 if(如果)、for(循环)、return(返回),跟着敲几遍自然就认得了。日常开发用到的数学,也大多只是加减乘除和大小比较,不需要高深的数学基础。

2. 把 C++ 基础语法学完,就能直接开发大型游戏或桌面软件吗?

还需要配合具体领域的开发框架才行。C++ 语言本身是通用的基础内功。等把语言基础打牢之后,如果想做桌面软件界面,可以继续学习 Qt 等界面框架;如果想做游戏开发,可以继续学习虚幻引擎或图形渲染知识。先把基础学扎实,后面进入任何方向都会顺畅很多。

上一篇: 没有了

下一篇:

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号