🔷 C++基础 · 目录

🔷 C++基础

照着《零基础学C++》做的完整自学笔记 —— 从第一个 Hello World 到控制台编程的地基(变量/运算符/分支/循环/函数/指针/结构体/类与对象/继承/模板/STL/RTTI 与异常/文件操作),最后一章用 Windows API + GDI+ 手搓一个「坦克动荡」小游戏把全书串起来。大白话、不跳步骤、必带生活比喻、常见误区、可折叠自测题。前十章环境用教材同款 Dev-C++,第十六章换 Visual Studio。
前置课程:Java 基础(第一次学编程)、服务器工作原理(后台怎么运转)。

内容来自我的 Obsidian 自学笔记 · 全 16 章 287 节完结 ✅(含坦克游戏项目)

第一章 初识C++

第二章 C++语言基础

2.1

第一个C++程序

一个程序的四段料(预处理→名字空间→ma…

⭐阅读全文 →
2.1.1

#include 指令

预处理:编译前把目标文件内容原样插入;不…

⭐阅读全文 →
2.1.2

iostream 标准库

i + o + stream;四个对象…

⭐阅读全文 →
2.1.3

命名空间

名字冲突的由来;std 是标准库抽屉;:…

⭐⭐阅读全文 →
2.1.4

main 函数

唯一入口;四部件 int/main/()…

⭐⭐阅读全文 →
2.1.5

函数体

花括号里的语句序列;从上到下执行;花括号…

⭐阅读全文 →
2.1.6

函数返回值

return 两件事:交回值 + 立即结…

⭐⭐阅读全文 →
2.1.7

注释

// 与 /* */(不可嵌套);写"为…

⭐阅读全文 →
2.2

常量及符号

五类常量(整型/实型/字符/字符串/其他…

⭐阅读全文 →
2.2.1

整型常量

四种进制写法;010 是八进制=8 的经…

⭐阅读全文 →
2.2.2

实型常量

小数形式与指数形式;默认 double…

⭐⭐阅读全文 →
2.2.3

字符常量

单引号一个字符;'A' 就是 65;转义…

⭐⭐阅读全文 →
2.2.4

字符串常量

双引号;末尾自动补 '0'("A" 占…

⭐⭐阅读全文 →
2.2.5

其他常量

const(有类型·推荐)vs #def…

⭐⭐阅读全文 →
2.3

变量

变量=带标签的空间;三要素(类型/名字/…

⭐阅读全文 →
2.3.1

标识符

硬规则四条(字母数字下划线·不能数字开头…

⭐阅读全文 →
2.3.2

变量的声明及赋值

声明/赋值/初始化;= 是从右到左;未初…

⭐⭐阅读全文 →
2.3.3

整型变量

家族与范围(short 2/int 4/…

⭐⭐⭐阅读全文 →
2.3.4

实型变量

float 4 字节 7 位 vs do…

⭐⭐阅读全文 →
2.3.5

字符变量

含实例01、02:char 存的是 AS…

⭐⭐阅读全文 →
2.4

数据类型

类型决定三件事(占多大/怎么解读/能算什…

⭐阅读全文 →
2.4.1

数值类型

选型四条;混算的隐式提升;5/2 得 2…

⭐⭐阅读全文 →
2.4.2

字符类型

char 家族的符号性(由编译器决定)…

⭐⭐阅读全文 →
2.4.3

布尔类型

bool 两个值、占 1 字节;非 0…

⭐⭐阅读全文 →
2.5

数据的输入与输出

三条通道与数据流向(>> 指向变量、<<…

⭐阅读全文 →
2.5.1

控制台屏幕

控制台=黑窗口;三条标准通道;重定向 >…

⭐阅读全文 →
2.5.2

C++语言中的流

流与缓冲区;cin 三条解析规则(跳空白…

⭐⭐阅读全文 →
2.5.3

流输出格式控制

含实例03、04:fixed + set…

⭐⭐⭐阅读全文 →
2.6

小结

第二章知识地图;六个必记结论;两关自测(…

⭐阅读全文 →

第三章 运算符与表达式

3.1

运算符

九类运算符总览(算/比/管/问/选/排…

⭐阅读全文 →
3.1.1

算术运算符

五兄弟 + - * / %;整数除法丢小…

⭐⭐阅读全文 →
3.1.2

关系运算符

六个比较符出 bool;== 与 = 手…

⭐⭐阅读全文 →
3.1.3

逻辑运算符

含实例01:&& 串联 /

⭐阅读全文 →
3.1.4

赋值运算符

= 从右往左装盒子;复合赋值 += -=…

⭐阅读全文 →
3.1.5

位运算符

含实例02:& 串联

⭐阅读全文 →
3.1.6

移位运算符

含实例03:<<n=×2ⁿ、>>n=÷2…

⭐⭐⭐阅读全文 →
3.1.7

sizeof运算符

量字节尺子三种用法;不是函数、编译期出结…

⭐⭐阅读全文 →
3.1.8

条件运算符

唯一三目 ? :;整个式子是值(能塞 c…

⭐⭐阅读全文 →
3.1.9

逗号运算符

排队挨个算、取最后一个;副作用不白算;f…

⭐阅读全文 →
3.2

结合性和优先级

金字塔:算术>移位>关系>逻辑>赋值>逗…

⭐⭐⭐阅读全文 →
3.3

表达式

表达式 = 运算符+操作数;必有值和类型…

⭐阅读全文 →
3.3.1

认识表达式

表达式(面粉)加分号成语句(面包);嵌套…

⭐⭐阅读全文 →
3.3.2

表达式中的类型转换

含实例04、05:算术看最高(楼梯只上不…

⭐⭐⭐阅读全文 →
3.4

判断左值与右值

左值=有地址的盒子(能赋值能取地址)、右…

⭐⭐阅读全文 →
3.5

小结

第三章知识地图;五个必记结论;两关自测(…

⭐阅读全文 →

第四章 条件判断语句

第五章 循环语句

第六章 函数

6.1

函数概述

函数=给一段代码起的名字(打包成一台带按…

⭐阅读全文 →
6.1.1

函数的定义

四部件:返回类型·函数名·参数表(合称函…

⭐⭐阅读全文 →
6.1.2

函数的声明

含实例01:声明=函数头+分号(只打招呼…

⭐⭐阅读全文 →
6.2

函数参数及返回值

两个口:入口是参数(可多)、出口是返回值…

⭐阅读全文 →
6.2.1

空函数

返回类型写 void(只干活不交结果)…

⭐阅读全文 →
6.2.2

形参与实参

形参=函数新开的盒子,实参=调用方的原件…

⭐⭐阅读全文 →
6.2.3

默认参数

含实例02:形参预设兜底值,调用可少传…

⭐⭐阅读全文 →
6.2.4

可变参数

含实例03:... 省略号+<cstda…

⭐⭐⭐阅读全文 →
6.2.5

返回值

return 两件事:交回值+立即结束(…

⭐⭐阅读全文 →
6.3

函数调用

调用五步:记位置→复制实参→跳进去→交结…

⭐阅读全文 →
6.3.1

传值调用

含实例04:经典翻车现场 swap 换不…

⭐⭐阅读全文 →
6.3.2

嵌套调用

A 调 B、B 调 C;先进后出(一摞便…

⭐⭐阅读全文 →
6.3.3

递归调用

含实例05:两要素=出口+向出口靠近;"…

⭐⭐⭐阅读全文 →
6.4

变量作用域

三层地盘(全局/局部/块内);就近遮蔽…

⭐⭐阅读全文 →
6.5

重载函数

含实例06:同名多套参数表;靠个数/类型…

⭐⭐阅读全文 →
6.6

内联函数

inline 把函数体就地铺到调用点;用…

⭐⭐阅读全文 →
6.7

变量的存储类别

两个维度:住哪儿+活多久;四兄弟 aut…

⭐⭐阅读全文 →
6.7.1

auto变量

默认的局部变量,住栈上、随函数生灭;每次…

⭐⭐阅读全文 →
6.7.2

static变量

含实例07:初始化只做一次、活到程序结束…

⭐⭐⭐阅读全文 →
6.7.3

register变量

老式优化建议(放进 CPU 寄存器);现…

⭐阅读全文 →
6.7.4

extern变量

声明"别处有",不分配空间;跨文件共享全…

⭐⭐⭐阅读全文 →
6.8

小结

第六章知识地图(五块拼图);六个必记结论…

⭐阅读全文 →

第七章 数组、指针和引用

7.1

一维数组

数组=一排连号柜子(同类型·连续·下标从…

⭐阅读全文 →
7.1.1

一维数组的声明

类型 名[长度];长度必须是编译期常量…

⭐⭐阅读全文 →
7.1.2

一维数组的引用

a[i] 是左值(能读能写);越界不报错…

⭐⭐阅读全文 →
7.1.3

一维数组的初始化

全填 / 填一部分(其余补 0)/ {}…

⭐⭐阅读全文 →
7.2

二维数组

一张有行有列的表格;内存里仍是行优先的一…

⭐阅读全文 →
7.2.1

二维数组的声明

类型 名[行数][列数];行在前列在后…

⭐⭐阅读全文 →
7.2.2

二维数组元素的引用

a[i][j] 两对方括号;a[i, j…

⭐⭐阅读全文 →
7.2.3

二维数组的初始化

分行 / 不分行(按行优先)/ 分别补…

⭐⭐阅读全文 →
7.3

字符数组

字符串=末尾带结束哨兵的字符数组;四大函…

⭐⭐阅读全文 →
7.4

指针

指针=存地址的变量;变量的值与地址;三个…

⭐⭐阅读全文 →
7.4.1

变量与指针

int *p = &a;;int *p…

⭐⭐阅读全文 →
7.4.2

指针运算符和取地址运算符

& 取地址 / * 解引用;* 的三重身…

⭐⭐阅读全文 →
7.4.3

指针运算

p+1 跳一个元素而不是一个字节;指针相…

⭐⭐⭐阅读全文 →
7.4.4

指向空的指针与空类型指针

NULL / nullptr 与判空;v…

⭐⭐阅读全文 →
7.4.5

指向常量的指针与指针常量

const int *p(锁值)对 in…

⭐⭐⭐阅读全文 →
7.5

指针与数组

数组名=首元素地址;a[i] 等价于 *…

⭐⭐阅读全文 →
7.5.1

指针与一维数组

四种等价写法;*p++ 与 (*p)++…

⭐⭐⭐阅读全文 →
7.5.2

指针与二维数组

a 行指针跳行、a[0] 元素指针跳格…

⭐⭐⭐阅读全文 →
7.5.3

指针与字符数组

while (*p) 靠结束哨兵自动停…

⭐⭐阅读全文 →
7.6

指针在函数中的应用

三种玩法:传递地址(改原件)/ 函数指针…

⭐⭐阅读全文 →
7.6.1

传递地址

void swap(int *a, in…

⭐⭐⭐阅读全文 →
7.6.2

指向函数的指针

int (*fp)(int, int)…

⭐⭐⭐阅读全文 →
7.6.3

从函数中返回指针

int *f(...);绝不能返回局部变…

⭐⭐⭐阅读全文 →
7.7

指针数组

int *p[5](指针数组)对 int…

⭐⭐⭐阅读全文 →
7.8

引用

引用=给变量起的别名;比指针更安全更好写…

⭐⭐阅读全文 →
7.8.1

引用概述

int &r = a;;三条铁律:必须初…

⭐⭐阅读全文 →
7.8.2

使用引用传递参数

void swap(int &a, in…

⭐⭐⭐阅读全文 →
7.8.3

使用数组作为函数参数

数组传参退化成指针 → 改原件、size…

⭐⭐阅读全文 →
7.9

小结

知识地图(八块拼图);六个必记结论;两关…

⭐阅读全文 →

第八章 结构体与共用体

8.1

结构体

结构体=把不同类型的数据打包成一条记录…

⭐阅读全文 →
8.1.1

结构体定义

struct 名 { 成员 };;末尾分…

⭐⭐阅读全文 →
8.1.2

结构体变量

Student s1;;点号访问成员;同…

⭐⭐阅读全文 →
8.1.3

结构体成员及初始化

含实例01:按成员顺序初始化/填不满补…

⭐⭐阅读全文 →
8.1.4

结构体的嵌套

成员本身是结构体,一层层点 s.birt…

⭐⭐阅读全文 →
8.1.5

结构体的大小

大小 ≠ 成员相加;两条对齐规则;按大小…

⭐⭐⭐阅读全文 →
8.2

重命名数据类型

typedef 原类型 新名字;(新名在…

⭐⭐阅读全文 →
8.3

结构体与函数

三种交法:传值/传指针/传引用;结构体越…

⭐阅读全文 →
8.3.1

使用结构体变量做函数参数

含实例02:传值=整块复制,函数里改不动…

⭐⭐阅读全文 →
8.3.2

使用结构体指针变量做函数参数

含实例03:Student *p 配 &…

⭐⭐⭐阅读全文 →
8.4

结构体数组

一排结构体=一张表格;比"几个平行数组"…

⭐阅读全文 →
8.4.1

结构体数组的声明与引用

Student cls[n];每条记录一…

⭐⭐阅读全文 →
8.4.2

使用指针访问结构体数组

含实例04:数组名=首地址;(p+i)-…

⭐⭐⭐阅读全文 →
8.5

共用体

共用体=成员共用同一块内存;并排 vs…

⭐阅读全文 →
8.5.1

共用体的定义与声明

union 名 { 成员 };;语法同…

⭐⭐阅读全文 →
8.5.2

共用体的大小

含实例05:大小取最大成员(再对齐);一…

⭐⭐⭐阅读全文 →
8.5.3

共用体的特点

三条特点+与结构体的完整对比表;典型用途…

⭐⭐阅读全文 →
8.6

枚举类型

枚举=给一串整数起名字;可读性+类型检查…

⭐阅读全文 →
8.6.1

枚举类型的声明

enum 名 { 名字列表 };;默认…

⭐⭐阅读全文 →
8.6.2

枚举类型变量

Weekday today = WED;…

⭐⭐阅读全文 →
8.6.3

枚举类型的运算

含实例06:比较/算术(结果转 int)…

⭐⭐阅读全文 →
8.7

小结

知识地图(六块拼图)+七个必记结论+两关…

⭐阅读全文 →

第九章 面向对象编程基础

第十章 类和对象

10.1

C++类

类=把数据和方法打包成自定义类型;cla…

⭐阅读全文 →
10.1.1

类概述

成员变量(私有)+成员函数(公有);三档…

⭐⭐阅读全文 →
10.1.2

类的声明与定义

class 名 { 成员 }; 末尾分号…

⭐⭐阅读全文 →
10.1.3

类的实现

.h 放声明、.cpp 放实现;头文件卫…

⭐⭐⭐阅读全文 →
10.1.4

对象的声明

含实例01:类名 对象名;;对象数组/指…

⭐⭐阅读全文 →
10.2

构造函数

构造函数=对象出生时自动跑;名字=类名…

⭐阅读全文 →
10.2.1

构造函数概述

初始化列表(const/引用成员只能用它…

⭐⭐阅读全文 →
10.2.2

复制构造函数

含实例02:复制构造=浅拷贝;有指针成员…

⭐⭐⭐阅读全文 →
10.3

析构函数

含实例03:~类名()、不能重载;离开作…

⭐⭐阅读全文 →
10.4

类成员

类成员地图:普通/静态、const 成员…

⭐阅读全文 →
10.4.1

访问类成员

三种访问视角(对象点/指针箭头/类内直写…

⭐⭐阅读全文 →
10.4.2

内联成员函数

类内定义自动内联;类外要写 inline…

⭐⭐阅读全文 →
10.4.3

静态类成员

静态成员全类一份;类外定义一次(漏了 u…

⭐⭐⭐阅读全文 →
10.4.4

隐藏的this指针

this=当前对象地址(p.show()…

⭐⭐⭐阅读全文 →
10.4.5

嵌套类

类里定义的类;外面要写 Outer::I…

⭐⭐阅读全文 →
10.4.6

局部类

函数里定义的类;成员函数必须就地写完、不…

⭐阅读全文 →
10.5

友元

友元=点名放行(不是拆墙);三种给法;单…

⭐阅读全文 →
10.5.1

友元概述

四种格式;friend 声明写在哪个区都…

⭐⭐阅读全文 →
10.5.2

友元类

friend class X; 整队放行…

⭐⭐阅读全文 →
10.5.3

友元函数

含实例04:友元函数不是成员(不写 ::…

⭐⭐阅读全文 →
10.6

命名空间

命名空间=给名字加姓氏;回收 using…

⭐阅读全文 →
10.6.1

使用命名空间

三种用法(全名/using 声明/usi…

⭐⭐阅读全文 →
10.6.2

定义命名空间

namespace 名 { } 末尾不加…

⭐⭐阅读全文 →
10.6.3

在多个文件中定义命名空间

命名空间跨文件:.h 放声明、.cpp…

⭐⭐⭐阅读全文 →
10.6.4

定义嵌套的命名空间

嵌套命名空间(公司→部门→小组);C++…

⭐⭐阅读全文 →
10.6.5

定义未命名的命名空间

未命名命名空间=本文件私有;static…

⭐⭐阅读全文 →
10.7

小结

知识地图(六块)+八个必记结论+两关自测…

⭐阅读全文 →

第十一章 继承与派生

11.1

继承

继承=站在已有类的肩膀上;语法 clas…

⭐阅读全文 →
11.1.1

类的继承

语法拆解(class 默认 privat…

⭐⭐阅读全文 →
11.1.2

继承后的可访问性

3×3 权限表;取小原则(越继承越封闭)…

⭐⭐⭐阅读全文 →
11.1.3

构造函数的调用顺序

含实例01:构造先父后子、析构先子后父…

⭐⭐阅读全文 →
11.1.4

子类显式调用父类的构造函数

含实例02:子类(参数) : 父类(参数…

⭐⭐阅读全文 →
11.1.5

子类隐藏父类的成员函数

含实例03:同名就全藏(与参数是否相同无…

⭐⭐⭐阅读全文 →
11.2

重载运算符

运算符本来就是函数(a + b ≡ op…

⭐阅读全文 →
11.2.1

重载运算符的必要性

不用重载:add(mul(a,b),c)…

⭐阅读全文 →
11.2.2

重载运算符的形式与规则

含实例04:成员 vs 非成员(对称的建…

⭐⭐⭐阅读全文 →
11.2.3

重载运算符的运算

返回值对照表:改自己返回 T&、产生新值…

⭐⭐⭐阅读全文 →
11.2.4

转换运算符

operator 目标类型():没有返回…

⭐⭐阅读全文 →
11.3

多重继承

class C : public A…

⭐阅读全文 →
11.3.1

多重继承的定义

一列父类、每个都要写 public;对象…

⭐⭐阅读全文 →
11.3.2

二义性

同名成员报 ambiguous;菱形继承…

⭐⭐⭐阅读全文 →
11.3.3

多重继承的构造顺序

含实例05:按继承声明顺序依次构造,与初…

⭐⭐阅读全文 →
11.4

多态

同一句话,不同反应;编译期多态(重载)v…

⭐阅读全文 →
11.4.1

虚函数概述

动态绑定三条件(指针/引用+虚函数+签名…

⭐⭐⭐阅读全文 →
11.4.2

利用虚函数实现动态绑定

含实例06:父类指针数组装各种子类,一次…

⭐⭐⭐阅读全文 →
11.4.3

虚继承

含实例07:virtual 继承让祖先只…

⭐⭐阅读全文 →
11.5

抽象类

含实例08:virtual ... =…

⭐⭐阅读全文 →
11.6

小结

知识地图(六块)+八个必记结论+两关自测…

⭐阅读全文 →

第十二章 模板

第十三章 STL

13.1

序列容器

STL 三件套=容器 + 算法 + 迭代…

⭐阅读全文 →
13.1.1

向量类模板

含实例01:vector = 会自己长大…

⭐⭐阅读全文 →
13.1.2

双端队列类模板

deque = 两头都能 O(1) 进出…

⭐⭐阅读全文 →
13.1.3

链表类模板

list = 双向链表;任意已知位置插删…

⭐⭐阅读全文 →
13.2

关联式容器

关联式容器=按键存(元素始终自动排序、查…

⭐阅读全文 →
13.2.1

set类模板

含实例02:set = 自动去重 + 自…

⭐⭐阅读全文 →
13.2.2

multiset 类模板

multiset = set + 允许重…

⭐⭐阅读全文 →
13.2.3

map类模板

map = 字典(键 + 值,按键 O(…

⭐⭐⭐阅读全文 →
13.2.4

multimap 类模板

multimap = 一个键对应多个值…

⭐⭐阅读全文 →
13.3

算法

算法总览:统一姿势 算法名(first…

⭐阅读全文 →
13.3.1

非修正序列算法

含实例03、04:只看不改的那一票——f…

⭐⭐阅读全文 →
13.3.2

修正序列算法

含实例05、06:会改数据的那一票——c…

⭐⭐阅读全文 →
13.3.3

排序算法

含实例07:sort(不稳)与 stab…

⭐⭐⭐阅读全文 →
13.3.4

数值算法

含实例08:在 <numeric>(不在…

⭐⭐阅读全文 →
13.4

迭代器

迭代器=容器与算法之间的通用插头(指针是…

⭐阅读全文 →
13.4.1

输出迭代器

含实例09:输出迭代器=只能写、只能前进…

⭐⭐阅读全文 →
13.4.2

输入迭代器

输入迭代器=只能读、只能前进、只能走一遍…

⭐⭐阅读全文 →
13.4.3

前向迭代器

前向迭代器=输入迭代器 + 能写 + 能…

⭐⭐阅读全文 →
13.4.4

双向迭代器

双向迭代器=前向 + --;解锁 rev…

⭐⭐阅读全文 →
13.4.5

随机访问迭代器

随机访问迭代器=能跳(+n / -n /…

⭐⭐⭐阅读全文 →
13.5

小结

知识地图(14 块)+ 十个必记结论 +…

⭐⭐阅读全文 →

第十四章 RTTI与异常处理

第十五章 文件操作

15.1

流简介

流=数据传输通道(抽象:只管进出,不管两…

⭐阅读全文 →
15.1.1

C++中的流类库

四个头文件各管一段(iostream 人…

⭐⭐阅读全文 →
15.1.2

类库的使用

用文件流永远五步(包含头文件 → 建对象…

⭐⭐阅读全文 →
15.1.3

ios类中的枚举常量

三组常量:① 打开方式(in out a…

⭐⭐阅读全文 →
15.1.4

流的输入-输出

<< 与 >> 是重载的函数(cout…

⭐⭐阅读全文 →
15.2

文件的打开

两种打开时机(构造时顺手打开 / 先建对…

⭐⭐阅读全文 →
15.2.1

打开方式

六个常量的选择与组合;三对最容易混:ap…

⭐⭐⭐阅读全文 →
15.2.2

默认打开方式

ifstream 默认 in;ofstr…

⭐⭐⭐阅读全文 →
15.2.3

在打开文件的同时创建文件

含 out(或 app、trunc)就会…

⭐⭐阅读全文 →
15.3

文件的读-写

两条路:文本(人能读、可手工改、跨平台…

⭐阅读全文 →
15.3.1

文件流

三个文件流类的分工(只读 / 只写 /…

⭐⭐阅读全文 →
15.3.2

写文本文件

<< 自动把各类型转成文字(bool 默…

⭐⭐阅读全文 →
15.3.3

读取文本文件

三种读法(>> 逐词跳过空白 / get…

⭐⭐⭐阅读全文 →
15.3.4

二进制文件的读-写

write 与 read + (char…

⭐⭐⭐阅读全文 →
15.3.5

实现文件复制

三种方案:逐字符 / 逐行 / 二进制块…

⭐⭐阅读全文 →
15.4

文件指针移动操作

两个位置:读位置(seekg/tellg…

⭐⭐⭐阅读全文 →
15.4.1

文件错误与状态

四盏灯:good / eof / fai…

⭐⭐⭐阅读全文 →
15.4.2

文件的追加

三种打开方式的写位置命运;app 是强制…

⭐⭐⭐阅读全文 →
15.4.3

文件结尾的判断

eof() 是事后报告,不是事前预告…

⭐⭐⭐阅读全文 →
15.4.4

在指定位置读-写文件

随机访问的核心公式:第 i 条记录的偏移…

⭐⭐⭐阅读全文 →
15.5

文件和流的关联与分离

open 是关联、close 是分离;一…

⭐⭐阅读全文 →
15.6

删除文件

C++ 标准库没有删文件的成员函数 →…

⭐⭐阅读全文 →
15.7

小结

知识地图(22 块)+ 十个必记结论 +…

⭐⭐阅读全文 →

第十六章 坦克动荡游戏