学习目标
- 掌握现代 C++ 的基本语法与核心思想
- 理解内存与资源管理,避免常见错误
- 熟悉 C++11 以来的现代特性(
auto
、nullptr
、智能指针、lambda 等) - 能够使用 CMake 构建小型项目,使用 Git 管理代码
- 初步参与开源项目,培养职业化开发习惯
职业价值:能读懂主流代码库,独立开发小型功能模块,并具备团队协作的基本能力。
1. 基础语法与面向对象
1.1 基本语法
- 变量与常量:
int
,double
,const
,constexpr
- 控制结构:
if
,switch
,for
,while
- 函数:值传递、引用传递、默认参数
#include <iostream>
using namespace std;
int add(int a, int b) {
return a + b;
}
int main() {
const int x = 10;
int y = 20;
cout << add(x, y) << endl;
}
1.2 面向对象
- 类与对象
- 构造函数、析构函数
- 封装、继承、多态
#include <iostream>
using namespace std;
class Animal {
public:
virtual void speak() { cout << "Animal sound\n"; }
virtual ~Animal() = default; // 虚析构函数
};
class Dog : public Animal {
public:
void speak() override { cout << "Woof!\n"; }
};
int main() {
Animal* a = new Dog();
a->speak(); // 输出 Woof!
delete a;
}
2. 内存与资源管理
2.1 指针与引用
- 指针:存储地址,可为空
- 引用:别名,必须初始化,不可更换绑定对象
int x = 42;
int* p = &x; // 指针
int& r = x; // 引用
2.2 RAII 思想
RAII(Resource Acquisition Is Initialization):资源获取即初始化,利用对象生命周期管理资源。
#include <fstream>
#include <string>
void writeFile(const std::string& filename) {
std::ofstream file(filename); // 构造时打开文件
file << "Hello RAII\n"; // 析构时自动关闭文件
}
3. 现代 C++ 特性(C++11 起)
3.1 auto
类型推导
auto x = 10; // int
auto y = 3.14; // double
auto z = "hello"; // const char*
3.2 nullptr
替代 NULL
,类型安全。
int* p = nullptr;
3.3 范围 for 循环
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
for (auto n : v) {
cout << n << " ";
}
}
3.4 智能指针
unique_ptr
:独占所有权shared_ptr
:共享所有权weak_ptr
:弱引用,避免循环引用
#include <memory>
#include <iostream>
using namespace std;
int main() {
auto p = make_unique<int>(42);
cout << *p << endl;
auto sp1 = make_shared<int>(100);
auto sp2 = sp1; // 引用计数 +1
cout << *sp2 << endl;
}
3.5 Lambda 表达式
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v = {3, 1, 4};
sort(v.begin(), v.end(), [](int a, int b) { return a < b; });
for (auto n : v) cout << n << " ";
}
4. 工具链入门
4.1 CMake 基础
CMakeLists.txt
示例:
cmake_minimum_required(VERSION 3.10)
project(HelloCMake)
set(CMAKE_CXX_STANDARD 17)
add_executable(hello main.cpp)
构建流程:
mkdir build && cd build
cmake ..
make
./hello
4.2 Git 基础
git clone <repo-url>
git checkout -b feature/my-task
git add .
git commit -m "fix: correct memory leak in module"
git push origin feature/my-task
5. 学习建议与实践
5.1 参与开源项目
- 选择合适的项目:从小型、活跃的 C++ 项目入手(如 fmt、json)。
- 阅读代码:先从
examples/
或tests/
目录入手,理解项目结构。 - 提交 bug:运行测试,尝试在不同平台编译,发现潜在问题。
- 参与修复:从修复文档错误、改进注释、修复小 bug 开始,逐步深入核心代码。
5.2 实践路径
- 第 1 周:阅读并运行一个小型开源库,理解其构建方式(CMake)。
- 第 2 周:尝试修改代码,提交第一个 Pull Request(哪怕是文档修复)。
- 第 3–4 周:定位并修复一个小 bug,或为项目增加一个简单测试用例。
- 第 5–6 周:在项目 issue 区参与讨论,尝试解决一个功能性问题。
5.3 职业化收获
- 学会阅读真实工程代码,而不仅是教材示例
- 熟悉 GitHub/GitLab 的协作流程(fork、branch、PR、review)
- 提升代码规范意识(遵循项目的
CONTRIBUTING.md
和clang-format
配置) - 积累开源贡献记录,为简历加分
阶段一总结
- 语法层面:掌握类、继承、多态、函数、引用与指针
- 现代特性:
auto
、nullptr
、智能指针、lambda、范围 for - 工程化:CMake 构建、Git 协作
- 实践产出:在开源项目中完成至少一次有效贡献(bug 修复、文档改进、测试用例)
完成阶段一后,你不仅能写出现代 C++ 代码,还能 融入真实工程环境,具备初步的团队协作与开源贡献经验,为后续 STL 与泛型编程学习打下坚实基础。