c++学习
hpp(Header Plus Plus ):计算机术语,指用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。
- 是Header Plus Plus 的简写。
- 与*.h类似,hpp是C++程序头文件 。
- 是VCL 专用的头文件,已预编译。
- 是一般模板类的头文件。
- 一般来说,.h里面只有声明,没有实现,而.hpp里声明实现都有,后者可以减 少.cpp的数量
CPP:
- 全局变量的定义(及初始化)
- 全局函数的定义
makefile:
需要掌握知识点:
基础知识:
声明、标识符和关键字、修饰符(数据限定符4个suls、类型限定符3个cvr)、存储类(5个arsem,定义变量/函数的范围(可见性)和生命周期)
数据类型、常量与变量(全局变量、作用域)、运算符(算术、关系、逻辑、位)、初等表达式,lambda表达式、指针(const/函数/野指针/智能指针)、赋值/判断与循环
函数(传值调用、指针调用、引用调用)、内联函数/递归函数
枚举类型、结构体(包容一切)、联合体(高效组合)、
c++面向对象:
类(继承/多态/重载)、数据抽象、数据封装、接口(抽象类)
c++高级:
文件和流:3类,ofstream/ifstream/fstream
异常处理:throw/catch/try
动态内存:栈/堆、new/delete、new/malloc()区别、数组动态内存分配、对象动态内存分配、构造函数/析构函数(~func())
命名空间(变量、函数):定义/使用、不连续/嵌套的命名空间
模板:泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。函数模板/类模板
预处理器:
预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。比如 #include、#define、#if、#else、#line 等。宏
信号处理:
编译和调试:(GCC 编译、gdb 调试工具、会写makefile)
多线程编程:线程(创建、停止、连接&分离线程)、资源、信号、同步、互斥、锁
多进程
泛型编程
网络编程:TCP/IP ,IO函数
资源库:
STL(标准模板库):容器(顺序、关联容器)、算法、迭代器、生成器
标准库:标准函数库、面向对象类库
备注:标准库包含标准模板库
vscode编辑器配置
https://mp.weixin.qq.com/s/_qEy7MA2vnKr-p0w9Lgl3w
安装插件:
- c/c++
- c/c++ Extension Pack
- Better C++ Syntax
- c/c++ Runner
项目配置
https://mp.weixin.qq.com/s/_qEy7MA2vnKr-p0w9Lgl3w
c_cpp_properties.json
用于使用vscode自带的代码提示工具,支持代码跳转等
CTRL+SHIFT+P ,然后搜索 c++:ui 选择。
tasks.json
用于编译c++文件
- 交互面板,输入task
- 选择tasks: Configure Default Build Task
- 选择Create tasks.json file from template
- 选择Others, 会在.vscode下面自动创建tasks.json,在编辑器中打开
- 进行如下配置
{
"version": "2.0.0",
"tasks": [
{
"label": "Build with Clang", //这个任务的名字在launch.json最后一项配置
"type": "shell",
"command": "clang++",
"args": [
"-std=c++17",
"-stdlib=libc++",
"-g",
// 生成调试信息,GUN可使用该参数
"${file}",
// file指正在打开的文件
"-o",
// 生成可执行文件
"${fileDirname}/${fileBasenameNoExtension}"
// fileDirname指正在打开的文件所在的文件夹
// fileBasenammeNoExtension指没有扩展名的文件,unix中可执行文件属于此类
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
launch.json
用于使用vscode自带的debug工具
在debug页面,点击打开lanch.json文件。
项目文件树:
c++项目实战介绍
c++工程的一般结构
- 头文件:类和函数的声明等,一般放在include文件夹下
- 源代码:类和函数的具体实现,一般放在src文件夹下【开源】
- 静态连接库:事先编译好的静态库(如.a和.lib文件),一般放在lib文件夹下
- 二进制文件:事先编译好的动态库(如.so和.dll文件),以及一些可执行程序(如.exe文件等),一般放在bin文件夹下。
- 资源文件:程序用到的图片、音视频、模型等
- 构建系统:如CMake或Makefile脚本(帮助编译&链接库),或其他IDE工程文件
- 自述文件:说明(ReadMe)和协议(License)
c++头文件的编写方式
- 预编译语句:防止重复编译
- 只放类的声明、函数原型、#define、静态/常量定义等
- 具体实现和变量定义等放在.cpp中(模板类可在.h中实现)
第三方库的调用
- 下载(编译)第三方库(头文件+链接库)
- 引入头文件,设置头文件路劲
- 添加链接库(库文件,路径)
一个完整的项目示例
基于openCV的目标检测算法部署
- 主要目录:include、src、third_parth、resources
- 第三方库:OpenCV、MinGW编译
- CodeBlocks传入命令行参数
sources
header
推荐书籍
《unix高级编程》
《剑指offer》
《Essential C++ (由c过度到c++)》
《 C++ Primer第四版 (内容很全,但是不深)》
《C++ 标准程序库》