C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)

C++ 入门知识 — 完整知识点


一、C++ 简介

1.1 什么是 C++

  • C++ 是一种通用的、编译型的、大小写敏感的编程语言
  • 支持过程式编程、面向对象编程、泛型编程、函数式编程四种编程范式
  • Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)于 1979 年在贝尔实验室开发
  • 最初名为 “C with Classes”(带类的 C),1983 年更名为 C++
  • 名称中的 ++ 是 C 语言的自增运算符,寓意"C 的增强版"

1.2 C++ 的特点

特点说明
高性能接近 C 语言的执行效率,适用于系统级开发
面向对象支持类、继承、多态、封装
泛型编程通过模板实现通用算法和数据结构
可移植性源代码可在不同平台编译运行
标准库丰富STL(标准模板库)提供容器、算法、迭代器
向后兼容兼容大部分 C 语言代码

二、C++ 简史

2.1 C 语言

时间事件
1972 年Dennis Ritchie 在贝尔实验室发明 C 语言
1978 年《The C Programming Language》出版(K&R C)
1989 年ANSI C 标准发布(C89/C90)
1999 年C99 标准发布
2011 年C11 标准发布
2018 年C17 标准发布

C 语言的核心特点:

  • 结构化编程语言
  • 提供底层内存访问能力(指针)
  • 语法简洁、执行高效
  • 广泛用于操作系统、嵌入式系统开发

2.2 C 语言编程原理(结构化编程)

核心思想:

  • 自顶向下、逐步细化:将大问题分解为小问题
  • 函数模块化:每个函数完成一个特定任务
  • 三种基本结构:顺序、选择、循环
// C 语言结构化编程示例
#include <stdio.h>

int main(void) {
    printf("Hello, C!\n");
    return 0;
}

C 语言编程流程:

源代码(.c) → 预处理器 → 编译器 → 汇编器 → 目标文件(.o/.obj) → 链接器 → 可执行文件

2.3 面向对象编程(OOP)

OOP 的四大核心概念:

概念说明关键字
封装将数据和操作数据的方法绑定,隐藏内部实现classprivatepublicprotected
继承子类继承父类的属性和方法,实现代码复用:virtual
多态同一接口可以有不同的实现方式virtualoverride
抽象提取事物的共同特征,形成抽象类或接口纯虚函数 = 0
// C++ OOP 示例
class Animal {                  // 抽象基类
public:
    virtual void speak() = 0;   // 纯虚函数
};

class Dog : public Animal {     // 继承
public:
    void speak() override {     // 多态
        std::cout << "Woof!" << std::endl;
    }
};

int main() {
    Animal* pet = new Dog();    // 基类指针指向派生类
    pet->speak();               // 输出: Woof!
    delete pet;
    return 0;
}

2.4 C++ 和泛型编程

泛型编程:编写与类型无关的通用代码,通过模板实现。

// 函数模板
template <typename T>
T getMax(T a, T b) {
    return (a > b) ? a : b;
}

// 类模板
template <typename T>
class Container {
    T element;
public:
    void set(T val) { element = val; }
    T get() { return element; }
};

int main() {
    std::cout << getMax(10, 20) << std::endl;       // int
    std::cout << getMax(3.14, 2.72) << std::endl;   // double
    return 0;
}

三、C++ 的起源

3.1 发展时间线

时间里程碑
1979 年Bjarne Stroustrup 开始 “C with Classes” 项目
1983 年正式更名为 C++
1985 年C++ 2.0 发布;《The C++ Programming Language》出版
1989 年C++ 3.0 发布,引入多重继承
1998 年C++98 标准发布(ISO/IEC 14882:1998)
2003 年C++03 标准发布(缺陷修复版本)
2011 年C++11 标准发布(重大更新,现代 C++ 起点)
2014 年C++14 标准发布
2017 年C++17 标准发布
2020 年C++20 标准发布
2023 年C++23 标准发布

四、可移植性和标准

4.1 可移植性问题

源代码级可移植:同一份源代码可在不同平台编译运行
二进制级可移植:编译后的可执行文件可直接在不同平台运行(C++ 一般不支持)

影响可移植性的因素:

  • 硬件架构差异(x86、ARM、RISC-V)
  • 操作系统差异(Windows、Linux、macOS)
  • 编译器差异(GCC、Clang、MSVC)
  • 系统 API 差异

提高可移植性的方法:

  • 遵循 C++ 标准编写代码
  • 避免使用平台特有的 API
  • 使用条件编译处理平台差异
  • 使用跨平台的第三方库(如 Qt、Boost)

4.2 C++ 标准

ISO C++ 标准演进:

标准代号关键特性
C++98ISO/IEC 14882:1998STL、模板、异常处理、命名空间
C++03ISO/IEC 14882:2003小幅缺陷修复
C++11ISO/IEC 14882:2011auto、lambda、智能指针、右值引用、范围for、nullptr、线程库
C++14ISO/IEC 14882:2014泛型 lambda、变量模板、二进制字面量
C++17ISO/IEC 14882:2017std::optional、std::variant、结构化绑定、文件系统库
C++20ISO/IEC 14882:2020Concepts、Ranges、协程、Modules、格式化库
C++23ISO/IEC 14882:2023std::expected、std::print、import std

4.3 C++11 核心新特性详解

// 1. auto 类型推导
auto x = 42;           // int
auto y = 3.14;         // double

// 2. nullptr(替代 NULL)
int* p = nullptr;

// 3. 范围 for 循环
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto& v : vec) {
    std::cout << v << " ";
}

// 4. Lambda 表达式
auto add = [](int a, int b) { return a + b; };
std::cout << add(3, 4);  // 7

// 5. 智能指针
std::unique_ptr<int> up = std::make_unique<int>(42);
std::shared_ptr<int> sp = std::make_shared<int>(100);

// 6. 右值引用和移动语义
std::string a = "hello";
std::string b = std::move(a);  // 移动而非拷贝

// 7. 初始化列表
std::vector<int> v = {1, 2, 3};

// 8. enum class(强类型枚举)
enum class Color { Red, Green, Blue };
Color c = Color::Red;

4.4 本书遵循的 C++ 标准

  • 本书以 C++11 为基础标准
  • 适当介绍 C++14/C++17 的新增特性
  • 代码示例在主流编译器(GCC 9+、Clang 10+、MSVC 2019+)上均能编译通过
  • 建议读者安装支持 C++17 的编译器版本

五、程序创建的技巧

5.1 创建源代码文件

C++ 源文件命名约定:

文件类型扩展名说明
源文件.cpp.cc.cxx包含函数实现(最常用 .cpp
头文件.h.hpp包含声明和宏定义
源文件(C).cC 语言源文件

源代码文件的结构:

// ========== 1. 头文件包含 ==========
#include <iostream>    // 系统头文件
#include "myheader.h"  // 用户自定义头文件

// ========== 2. 宏定义 ==========
#define PI 3.14159

// ========== 3. 命名空间 ==========
using namespace std;

// ========== 4. 全局变量声明 ==========
int globalVar = 100;

// ========== 5. 函数声明(原型) ==========
int add(int a, int b);

// ========== 6. 主函数 ==========
int main() {
    cout << add(3, 4) << endl;
    return 0;
}

// ========== 7. 函数定义 ==========
int add(int a, int b) {
    return a + b;
}

5.2 编译和链接

完整流程:

源代码 (.cpp)
    │
    ▼
【预处理】(展开宏、处理#include、条件编译)
    │
    ▼
【编译】(语法分析 → 语义分析 → 生成汇编代码)
    │
    ▼
【汇编】(汇编代码 → 机器码 → 目标文件 .o / .obj)
    │
    ▼
【链接】(合并目标文件 + 库文件 → 可执行文件 .exe / .out)

各阶段详解:

阶段一:预处理(Preprocessing)
g++ -E main.cpp -o main.i    # 生成预处理后的文件

处理内容:

  • #include:将头文件内容插入到源文件中
  • #define:进行宏替换
  • #ifdef / #ifndef:条件编译
  • 删除注释
阶段二:编译(Compilation)
g++ -S main.i -o main.s      # 生成汇编代码文件

处理内容:

  • 词法分析、语法分析、语义分析
  • 类型检查
  • 代码优化
  • 生成汇编代码
阶段三:汇编(Assembly)
g++ -c main.cpp -o main.o    # 生成目标文件(跳过以上步骤直接到汇编)

处理内容:

  • 将汇编代码转换为机器指令
  • 生成目标文件(ELF 格式 / COFF 格式)
阶段四:链接(Linking)
g++ main.o utils.o -o myapp  # 链接多个目标文件

处理内容:

  • 符号解析:找到函数和变量的定义地址
  • 地址重定位:修正函数调用和变量引用的地址
  • 合并标准库代码

两种链接方式:

方式命令示例说明
静态链接g++ main.cpp -static -o app将库代码打包进可执行文件,文件大但不依赖外部库
动态链接g++ main.cpp -o app(默认)运行时加载共享库,文件小但需要动态库存在

5.3 一步编译(实际开发常用)

# 直接从源代码生成可执行文件(编译器自动完成全部步骤)
g++ main.cpp -o myapp

# 编译多个源文件
g++ main.cpp utils.cpp -o myapp

# 指定 C++ 标准版本
g++ -std=c++11 main.cpp -o myapp
g++ -std=c++17 main.cpp -o myapp

# 开启所有警告
g++ -Wall -Wextra main.cpp -o myapp

# 开启调试信息
g++ -g main.cpp -o myapp

# 开启优化
g++ -O2 main.cpp -o myapp

六、C++ 主流开发工具介绍

6.1 工具对比总览

工具类型平台难度适用场景
Visual Studio 2022IDEWindows初级Windows 应用开发、学习入门
VS Code + GCC/Clang编辑器 + 编译器跨平台中级轻量开发、跨平台项目
Code::BlocksIDE跨平台初级C/C++ 学习入门
CLionIDE跨平台中级专业 C++ 开发
Dev-C++IDEWindows初级C/C++ 学习入门(轻量)
GCC (g++)编译器跨平台中级命令行编译
Clang编译器跨平台中级命令行编译、更友好的错误提示
MSVC编译器Windows初级Windows 平台原生编译

七、开发工具的安装

7.1 方案一:Visual Studio 2022(推荐初学者,Windows 平台)

7.1.1 下载
  1. 打开浏览器,访问官网:https://visualstudio.microsoft.com/zh-hans/
  2. 点击 “下载 Visual Studio” 按钮
  3. 选择 “Community 2022”(社区版,免费)
7.1.2 安装步骤
  1. 运行安装程序

    • 双击下载的 VisualStudioSetup.exe
    • 等待安装程序初始化完成
  2. 选择工作负载

    • 勾选 “使用 C++ 的桌面开发”
    • 右侧确认以下组件已被勾选:
      • ✅ MSVC v143 - VS 2022 C++ x64/x86 生成工具
      • ✅ Windows 11 SDK(或 Windows 10 SDK)
      • ✅ C++ CMake 工具
      • ✅ C++ ATL(可选)
      • ✅ IntelliCode
  3. 选择安装位置

    • 可修改安装路径(建议安装到 SSD 磁盘)
    • 安装需要约 8~15 GB 空间
  4. 开始安装

    • 点击 “安装” 按钮
    • 等待下载和安装完成(约 20~40 分钟,取决于网速)
    • 安装完成后可能提示重启
  5. 首次启动配置

    • 登录 Microsoft 账号(可跳过)
    • 选择开发设置:“Visual C++”
    • 选择颜色主题(深色/浅色)
7.1.3 创建第一个项目
  1. 点击 “创建新项目”
  2. 选择 “控制台应用”(语言:C++,平台:Windows)
  3. 输入项目名称(如 HelloWorld),选择保存位置
  4. 点击 “创建”
  5. 在生成的 HelloWorld.cpp 中编写代码:
#include <iostream>
using namespace std;

int main() {
    cout << "Hello, World!" << endl;
    return 0;
}
  1. Ctrl + F5(开始执行不调试)运行程序

7.2 方案二:VS Code + MinGW-w64(推荐,跨平台轻量方案)

7.2.1 安装 MinGW-w64(GCC 编译器,Windows 平台)

方法 A:通过 MSYS2 安装(推荐)

  1. 下载 MSYS2

    • 访问:https://www.msys2.org/
    • 下载安装程序 msys2-x86_64-xxxxxx.exe
  2. 安装 MSYS2

    • 运行安装程序,选择安装目录(如 C:\msys64
    • 完成后勾选"立即运行 MSYS2",点击完成
  3. 安装 MinGW-w64 工具链

    • 在打开的 MSYS2 UCRT64 终端中输入:
    # 更新包数据库
    pacman -Syu
    # (可能提示关闭窗口,关闭后重新打开 MSYS2 UCRT64 终端继续)
    
    # 安装 MinGW-w64 GCC 工具链
    pacman -S mingw-w64-ucrt-x86_64-gcc
    
    • 输入 Y 确认安装
  4. 配置环境变量

    • Win + S 搜索 “环境变量”
    • 点击 “编辑系统环境变量”
    • 点击 “环境变量” 按钮
    • “系统变量” 中找到 Path,双击编辑
    • 点击 “新建”,添加:C:\msys64\ucrt64\bin
    • 一路点击"确定"保存
  5. 验证安装

    • 打开 新的 命令提示符或 PowerShell:
    g++ --version
    
    • 显示类似 g++ (Rev1, Built by MSYS2 project) 14.x.x 即为成功
7.2.2 安装 VS Code
  1. 下载 VS Code

    • 访问:https://code.visualstudio.com/
    • 下载 Windows 版(.exe 安装程序)
  2. 安装 VS Code

    • 运行安装程序
    • 勾选以下选项:
      • ✅ 将"通过 Code 打开"操作添加到文件上下文菜单
      • ✅ 将"通过 Code 打开"操作添加到目录上下文菜单
      • ✅ 将 Code 注册为受支持的文件类型的编辑器
      • ✅ 将 Code 添加到 PATH
    • 完成安装
  3. 安装 C/C++ 扩展

    • 打开 VS Code
    • Ctrl + Shift + X 打开扩展面板
    • 搜索并安装以下扩展:
      • C/C++(Microsoft 出品,提供 IntelliSense、调试支持)
      • Code Runner(可选,一键运行代码)
      • Chinese (Simplified) Language Pack(可选,中文语言包)
7.2.3 配置 VS Code 的 C++ 开发环境
  1. 创建工作文件夹

    mkdir D:\cpp_projects
    cd D:\cpp_projects
    code .
    
  2. 创建源文件

    • 在 VS Code 中新建 main.cpp
  3. 配置 tasks.json(编译任务)

    • Ctrl + Shift + P,输入 Tasks: Configure Task
    • 选择 Create tasks.json file from template
    • 选择 Others
    • 将内容替换为:
    {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "build",
                "type": "shell",
                "command": "g++",
                "args": [
                    "-g",
                    "-std=c++17",
                    "-Wall",
                    "-Wextra",
                    "${file}",
                    "-o",
                    "${fileDirname}\\${fileBasenameNoExtension}.exe"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "problemMatcher": ["$gcc"]
            }
        ]
    }
    
  4. 配置 launch.json(调试配置)

    • Ctrl + Shift + P,输入 Debug: Open launch.json
    • 选择 C++ (GDB/LLDB)
    • 将内容替换为:
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Debug C++",
                "type": "cppdbg",
                "request": "launch",
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${fileDirname}",
                "environment": [],
                "externalConsole": true,
                "MIMode": "gdb",
                "miDebuggerPath": "gdb",
                "setupCommands": [
                    {
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                "preLaunchTask": "build"
            }
        ]
    }
    
  5. 编写并运行

    • 编写 Hello World 程序
    • Ctrl + F5 运行,或按 F5 调试

7.3 方案三:MinGW-w64(独立安装方式,Windows)

7.3.1 下载
  1. 访问:https://github.com/niXman/mingw-builds-binaries/releases
  2. 下载适合的版本(如 x86_64-13.2.0-release-posix-seh-ucrt-rt_v11-rev1.7z
7.3.2 安装
  1. 将下载的压缩包解压到无中文路径的目录(如 C:\mingw64

  2. 配置环境变量:

    • C:\mingw64\bin 添加到系统 Path 变量中
  3. 验证安装:

    g++ --version
    

7.4 方案四:GCC(Linux 平台)

7.4.1 Ubuntu / Debian
# 更新包管理器
sudo apt update

# 安装 build-essential(包含 g++、make 等)
sudo apt install build-essential

# 验证安装
g++ --version

# 可选:安装 GDB 调试器
sudo apt install gdb

# 可选:安装最新版 GCC(如 GCC 13)
sudo apt install software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install g++-13
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 100
7.4.2 Fedora / CentOS / RHEL
# Fedora
sudo dnf install gcc-c++ make

# CentOS / RHEL
sudo yum install gcc-c++ make

# 验证
g++ --version
7.4.3 Arch Linux
sudo pacman -S gcc
g++ --version

7.5 方案五:Clang/LLVM(macOS 平台)

7.5.1 macOS 安装
# 安装 Xcode Command Line Tools(包含 Clang 编译器)
xcode-select --install

# 验证
clang++ --version

# 可选:通过 Homebrew 安装最新版 LLVM
brew install llvm
# 添加到 PATH
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
7.5.2 Ubuntu 安装 Clang
sudo apt update
sudo apt install clang
clang++ --version

7.6 方案六:Code::Blocks(跨平台免费 IDE)

7.6.1 下载与安装
  1. 访问:http://www.codeblocks.org/downloads/
  2. 下载带 MinGW 的版本(如 codeblocks-20.03mingw-setup.exe
  3. 运行安装程序:
    • 选择安装组件:确保勾选 MinGW Compiler
    • 选择安装目录
    • 完成安装
7.6.2 配置与使用
  1. 打开 Code::Blocks
  2. 菜单 → FileNewProjectConsole application
  3. 选择语言:C++
  4. 输入项目名称和保存位置
  5. 编写代码,按 F9 编译运行

7.7 方案七:Dev-C++(Windows 轻量级 IDE)

7.7.1 下载与安装
  1. 访问:https://sourceforge.net/projects/orwelldevcpp/
  2. 下载最新版本安装程序
  3. 运行安装程序:
    • 选择语言(Chinese Simplified)
    • 选择安装目录
    • 完成安装
7.7.2 使用
  1. 打开 Dev-C++
  2. 文件新建源代码
  3. 编写代码
  4. 运行编译运行(或按 F11

八、第一个 Hello World 入门程序

8.1 Hello World 程序代码

#include <iostream>    // 预处理指令:包含输入输出流头文件

int main() {           // 主函数,程序入口
    std::cout << "Hello, World!" << std::endl;  // 输出字符串
    return 0;          // 返回 0 表示程序正常退出
}

8.2 逐行详解

代码作用
1#include <iostream>预处理指令,将 iostream 头文件内容插入源代码,提供输入输出功能
2(空行)提高可读性
3int main()主函数声明,int 表示返回整数类型,() 内可无参数
4{函数体开始
5std::cout << "Hello, World!" << std::endl;使用标准输出流打印字符串,endl 换行并刷新缓冲区
6return 0;返回 0 给操作系统,表示程序成功执行
7}函数体结束

8.3 关键概念解析

#include 预处理指令
  • #include <iostream>:包含标准输入输出流头文件
  • < > 表示在系统目录中查找头文件
  • " " 表示在当前项目目录中查找头文件
main() 函数
  • 每个 C++ 程序必须有且仅有一个 main() 函数
  • main() 是程序的入口点,操作系统调用它来启动程序
  • 返回类型为 int,返回 0 通常表示成功
std::coutstd::endl
  • std::cout:标准输出流对象(console output)
  • <<:插入运算符,将右侧内容发送到左侧的流
  • std::endl:输出换行符并刷新缓冲区
  • std:::命名空间限定符,coutendlstd 命名空间中
return 0;
  • 向操作系统返回状态码 0
  • 0 表示程序正常结束
  • 非零值通常表示异常或错误

8.4 使用 using namespace std 的简化写法

#include <iostream>
using namespace std;   // 引入 std 命名空间(不推荐在大型项目中使用)

int main() {
    cout << "Hello, World!" << endl;  // 不需要写 std::
    return 0;
}

更推荐的写法(按需引入):

#include <iostream>
using std::cout;       // 只引入需要的名称
using std::endl;

int main() {
    cout << "Hello, World!" << endl;
    return 0;
}

8.5 编译和运行 Hello World

# 使用 g++ 编译
g++ main.cpp -o hello

# 运行(Linux / macOS)
./hello

# 运行(Windows)
hello.exe

# 输出
Hello, World!

8.6 多文件编译示例

// ===== hello.h(头文件) =====
#ifndef HELLO_H
#define HELLO_H

void sayHello();

#endif
// ===== hello.cpp(实现文件) =====
#include <iostream>
#include "hello.h"

void sayHello() {
    std::cout << "Hello, World!" << std::endl;
}
// ===== main.cpp(主文件) =====
#include "hello.h"

int main() {
    sayHello();
    return 0;
}
# 编译多个源文件
g++ main.cpp hello.cpp -o hello

# 运行
./hello

九、常见问题与排错

9.1 编译错误速查

错误信息原因解决方法
'g++' is not recognized未安装 GCC 或未配置 PATH 环境变量安装 MinGW-w64 并配置 PATH
fatal error: iostream: No such file编译器安装不完整重新安装完整的 C++ 工具链
error: expected ';' before缺少分号检查上一行末尾是否缺少 ;
error: 'cout' is not a member of 'std'未包含 iostream 头文件添加 #include <iostream>
undefined reference to 'main'缺少 main 函数确保有 int main() 函数
warning: unused variable 'x'变量声明但未使用删除未使用的变量或使用它

9.2 调试技巧

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    
    // 方法1:使用 cout 输出调试信息
    cout << "Debug: x = " << x << endl;
    
    // 方法2:使用 assert 宏
    #include <cassert>
    assert(x > 0);   // 如果 x <= 0 则程序终止并报错
    
    // 方法3:使用条件编译
    #ifdef DEBUG
    cout << "Debug mode: x = " << x << endl;
    #endif
    
    return 0;
}

十、总结

本章核心知识点清单

编号知识点重要程度
1C++ 支持的四种编程范式★★★☆☆
2C 语言的历史和结构化编程原理★★★☆☆
3OOP 的四大特性:封装、继承、多态、抽象★★★★★
4泛型编程和模板的基本概念★★★★☆
5C++ 标准演进(C++98 → C++11 → C++20)★★★☆☆
6C++11 核心新特性(auto、lambda、智能指针等)★★★★★
7编译链接的完整流程(预处理→编译→汇编→链接)★★★★☆
8至少熟练使用一种开发工具★★★★★
9Hello World 程序的每一行含义★★★★☆
10#includemain()coutreturn 0 的作用★★★★★

学习建议

  1. 动手实践:每学一个知识点,立即编写代码验证
  2. 理解编译过程:知道代码从源文件到可执行文件经历了什么
  3. 养成好习惯:代码缩进规范、注释清晰、变量命名有意义
  4. 逐步进阶:先掌握基础语法,再学习面向对象和泛型编程
  5. 善用文档:查阅 cppreference.com 获取权威参考
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值