c++学习笔记
·
Q: 多态是怎么实现的?
A: 通过基类指针或引用指向派生类对象。每个对象有 vptr 指向自己的 vtable,
vtable 中存储虚函数地址。调用虚函数时,从对象的 vptr 找到 vtable,
再找到对应的函数地址执行。这个过程叫动态绑定。Q: 为什么用指针/引用,不能直接用对象?
A: 直接赋值会触发"对象切片",派生类特有的成员被切割掉,vptr 也被覆盖,
无法实现多态。指针和引用只保存地址,不拷贝对象,所以能保留完整信息。
场景 推荐 原因 函数参数(只读) const T&不拷贝,不能为空 函数参数(修改) T&简洁,安全 返回值(存在) const T&或T&避免拷贝 返回值(可能不存在) T*可以返回 NULL 动态内存分配 T*new 返回指针 动态数组 T*或T**必须用指针 可选参数 T*可以传 NULL 多态 T*或T&都可以 遍历容器 const T&避免拷贝 链式调用 T&返回 *this 成员变量(对象) T或T*看生命周期 成员变量(数组) T*或T**必须用指针
环境配置的目的:
环境配置的核心目的,就是为你的代码在特定计算机上成功编译、链接和运行,建立一套完整、正确的“工具链”和“依赖库”环境。
简单说,就是让编译器能听懂你的代码,链接器能找到它依赖的库,最终生成一个能跑起来的程序。
🧩 环境配置解决了哪些问题?
问题 说明 如果配置不对会怎样 编译器找不到头文件 #include <QMainWindow>需要编译器知道去哪找 Qt 的头文件报错: QMainWindow: No such file or directory链接器找不到库文件 你的代码用到了 Qt 的库函数,链接器需要找到对应的 .lib或.a文件报错: LNK2019: 无法解析的外部符号运行时找不到 DLL 程序启动时需要加载 Qt 的 Qt6Core.dll等动态链接库报错: 由于找不到 Qt6Core.dll,无法继续执行代码编译器版本不匹配 Qt 和编译器(MinGW/MSVC)版本必须配套 报错: incompatible compiler或各种奇怪的链接错误构建系统(qmake/CMake)找不到 Qt qmake 需要知道 Qt 的安装路径才能生成正确的 Makefile 报错: Cannot find file: ... .pro🔧 环境配置包含哪些内容?
1. 编译器工具链
MinGW 或 MSVC:C++ 编译器本身
make / nmake / jom:构建工具,负责调用编译器
gdb / cdb:调试器,用于调试程序
2. Qt 框架本身
头文件(include):所有 Qt 类的声明(如
QMainWindow)库文件(lib):已编译好的 Qt 函数实现
动态链接库(bin/dll):运行时需要的
.dll文件qmake:Qt 项目构建工具,用于生成 Makefile
moc / uic / rcc:元对象编译器、UI 编译器和资源编译器
3. 路径与变量配置
配置项 用途 INCLUDEPATH告诉编译器头文件的搜索路径 LIB/LIBS告诉链接器库文件的搜索路径 PATH告诉运行时系统 DLL 的搜索路径 .pro文件中的QT += widgets告诉 qmake 需要链接哪些 Qt 模块 环境变量(如 INCLUDE、LIB)让编译器和链接器在系统范围内找到所需文件 CMake / qmake 配置 让构建工具正确调用编译器和链接器,传递正确的参数 🎯 环境配置的本质
环境配置的本质就是让工具链和库文件“彼此认识”:
┌─────────────────────────────────────────────────────────────────┐ │ 源代码 (*.cpp, *.h, *.ui) │ │ │ │ │ ▼ │ │ ★ 环境配置告诉工具:"Qt 的头文件在 D:\Qt\...\include" │ │ │ │ │ ▼ │ │ 编译器(cl.exe / g++.exe)→ 编译成 .obj / .o │ │ │ │ │ ▼ │ │ ★ 环境配置告诉工具:"Qt 的库文件在 D:\Qt\...\lib" │ │ │ │ │ ▼ │ │ 链接器(link.exe / ld)→ 链接成 .exe 可执行文件 │ │ │ │ │ ▼ │ │ ★ 环境配置告诉系统:"Qt 的 DLL 在 D:\Qt\...\bin" │ │ │ │ │ ▼ │ │ 运行时 → 加载 DLL → 程序成功运行 ✅ │ └─────────────────────────────────────────────────────────────────┘💡 总结
问题 答案 环境配置是什么? 让编译器、链接器和运行时系统能找到所有必要的文件 为什么要配置? 否则工具链不知道去哪找头文件、库文件和动态链接库 核心配置哪些? 头文件路径(include)、库文件路径(lib)、DLL 路径(bin)、构建工具路径(qmake/CMake) 怎么验证配置成功了? 编译不报错、链接不报错、运行不崩溃 😊 环境配置的目的是使最终生成的可执行程序可以进行全局访问。
更多推荐

所有评论(0)