C++ 毕设入门教程

知识库
知识库文档
/tech-stacks/cpp/tutorial/C++ 毕设入门教程.md

文档

C++ 毕设入门教程

前言

C++ 在毕设中常用于:算法仿真、游戏开发(Unreal Engine)、图像处理(OpenCV)、桌面应用(Qt)、单片机上位机。本教程从实际毕设需求出发,帮你快速搭建能用的 C++ 项目。


第一章:选择合适的 C++ 标准

毕设推荐 C++17(兼容性好)或 C++20(新特性多)。

// CMakeLists.txt 中指定
set(CMAKE_CXX_STANDARD 17)

毕设中最常用的现代特性

特性 用途
auto 省去冗长类型声明
vector / map / set STL 容器,替代 C 数组
unique_ptr / shared_ptr 告别 new/delete
Lambda 回调、排序、线程传参
std::thread / std::async 多线程加速
Range-for 简洁遍历

第二章:项目结构最佳实践

毕设项目推荐结构(以图像处理项目为例):

ImageProcessor/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   ├── ImageLoader.cpp
│   ├── Filter.cpp
│   └── Utils.cpp
├── include/
│   ├── ImageLoader.h
│   ├── Filter.h
│   └── Utils.h
├── tests/
│   └── test_filter.cpp
└── data/
    └── sample.jpg

CMakeLists.txt 模板:

cmake_minimum_required(VERSION 3.16)
project(ImageProcessor LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)

# 自动收集源文件
file(GLOB_RECURSE SOURCES src/*.cpp)

add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE include)

# 链接 OpenCV(如有)
find_package(OpenCV QUIET)
if(OpenCV_FOUND)
    target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})
endif()

第三章:常见毕设场景与代码

场景一:串口通信上位机(Qt + C++)

参考 Qt 例程中的信号与槽模式,配合 QSerialPort 即可实现。

场景二:图像处理(OpenCV)

人脸检测 10 行搞定:

cv::CascadeClassifier face_cascade;
face_cascade.load("haarcascade_frontalface_default.xml");
std::vector<cv::Rect> faces;
face_cascade.detectMultiScale(gray, faces);
for (const auto& face : faces)
    cv::rectangle(img, face, cv::Scalar(0, 255, 0), 2);

场景三:算法可视化(控制台 + 文件输出)

把运算结果写入 CSV,用 Python/Excel 可视化,是最省事的方案:

#include <fstream>
std::ofstream csv("result.csv");
csv << "x,y\n";
for (int i = 0; i < 100; i++)
    csv << i << "," << sin(i * 0.1) << "\n";

第四章:调试与排错

必学 GDB 命令

g++ -g -o program program.cpp   # -g 开启调试符号
gdb ./program
(gdb) break main.cpp:42          # 设断点
(gdb) run                        # 运行
(gdb) print variable             # 查看变量
(gdb) backtrace                  # 调用栈
(gdb) continue                   # 继续

常见错误速查

错误 原因
Segmentation Fault 空指针/野指针/数组越界
undefined reference 链接时找不到函数定义,检查 CMake 链接
double free 同一内存释放了两次
STL 迭代器失效 遍历容器时修改了容器结构

第五章:毕设答辩准备

  1. 代码要能跑:答辩现场至少演示一个完整流程
  2. 注释要清楚:关键函数写 Doxygen 风格注释
  3. README.md:放项目介绍、编译方式、运行截图
  4. 版本管理:用 Git 记录开发过程,提交历史也是工作量证明

思考题

  1. shared_ptrunique_ptr 的区别是什么?什么时候该用哪个?
  2. 如何用 CMake 引入第三方库(如 nlohmann/json)?
  3. C++ 中如何处理 CSV 文件的读写?

信息

路径
/tech-stacks/cpp/tutorial/C++ 毕设入门教程.md
更新时间
2026/5/30