当前位置: 首页 > news >正文

C++概览:工具链、基础知识、进阶及总结

本篇写给C++初学者,作为概览,文中仅包含各方面基础知识,无深入分析。

C++基础概念简介

C++编译过程示意图

关键词:源文件、预编译、编译、汇编、链接
在这里插入图片描述

C++工具链总结

cmake项目工程文件是一种中介工程文件,可以转化成其他不同类型的工程文件,如visual studio/XCode工程文件,这样在不同操作系统中移植代码会方便很多。

关键词:
IDE : XCode / Visual Studio / Visual Studio Code
项目工具:xcodebuild / msbuild / nmake / cmake / make / ninja
代码组织:.xcodeproject / .sln / CMakeLists.txt / Makefile / build.ninja
编译器:clang / vc++ / gcc / g++

在这里插入图片描述

C++语法基础概念

函数及作用域

关键词: 命名空间 、 前置声明 、 函数声明 、 函数定义 、 main 、程序入口、变量
在这里插入图片描述

类及其特性

  • 抽象:把公共特性找抽象出来,像机动车通常都有4个轮子、一个盒子。
  • 封装:把相关的数据放到一起,像机动车有车厢、座位、轮子等。
  • 继承:为派生类(子类)增加个性化的属性,像救护车上有蓝色救护灯
  • 多态:不同派生类对同一个成员函数的实现不一样,像跑车和老头乐的驾驶体验定不相同

关键词:类定义、公有、可见性、继承、私有、虚函数、纯虚函数、重写、覆盖、override、构造函数、纯虚类
在这里插入图片描述

模板及常用泛型

通常用于在不更改类结构的情况,改变底层的数据类型。例如,
棋盘坐标用整型(int)就可以表示,如(2,3)表示2行3列。
地图的坐标就需要用浮点数(float/double)表示,如(123.234, 345.456)表示x/y的值。
此时写整型、浮点型的点坐标类明显不合适。那么使用模板,可以比较好的解决这个问题

用模板写出的函数或类均属于泛型。C++标准库提供的常用泛型类包括:

  • std::vector 动态序列数组,常用于随机访问多的场景,示例 std::vector
  • std::list 链表,常用于插入、删除较多的场景,示例 std::list
  • std::deque 双向队列,适用于首尾插入及删除较多、及随机访问多的场景,示例 std:: deque
  • std::set 集合,保证无相同元素的场景,示例 std::set
  • std::unordered_set 哈希集合,效率较std::set高,但数据无序,示例 std:: unordered _set
  • std::map<Key, Value> 二叉树映射,需要key-value映射的场景,示例 std::map<int, double>
  • std::unordered_map<Key, Value> 哈希映射,效率较std::map高,但数据无序,示例 std:: unordered _map<int, double>

智能指针

  • std::shared_ptr 共享指针,最接近于裸指针(如int*),指针内保存引用计数,计数为0时删除数据
  • std::unique_ptr 独享指针,数据不可分离所有权,指针销毁时,数据同时销毁
  • std::auto_ptr (不建议使用) 介于std::share_ptr与std::unique_ptr之间,所有权可转移,且同一时刻只有一个指针有数据所有权。

C++进阶

代码规范

Google代码规范
建议:启用静态检查,clang-tidy
在这里插入图片描述

设计模式

《Head First设计模式》
在这里插入图片描述

在这里插入图片描述

性能进阶

《Effective C++》
在这里插入图片描述

备查工具书

《C++ Primer》
在这里插入图片描述

阅读开源项目

比如pytorch
Github的开源项目,stars多,fork多,代码质量通常不错。项目的主体代码组织是至少经过几个大版本迭代的,阅读代码可有效提升对软件工程的理解。

敏捷开发模式

敏捷开发是一种以人为核心,迭代,循序渐进的开发方式。
在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。
加单的说,敏捷开发并不是追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。

敏捷开发模式的分类

敏捷开发的实现主要包括Scrum与XP(极限编程,ExtremeProgramming),还有其他的一些方式。Scrum是迭代式增量软件开发过程。

  • XP极限编程更侧重于实践,并力求把实践做到极限,实 践可以是测试先行,也可以是结对变成,关键要看具体的应用场景。
  • SCRUM则是一种开发 流程框架,也可以说是一种套路。SCRUM框架中包含了三个角色,三个工件,四个仪式。其目的是为了有效完成每一次迭代周期的工作。SCRUM是一个重点。

回归本质

大胆尝试,快速迭代
在这里插入图片描述

http://www.lryc.cn/news/28831.html

相关文章:

  • 目标检测中回归损失函数(L1Loss,L2Loss,Smooth L1Loss,IOU,GIOU,DIOU,CIOU,EIOU,αIOU ,SIOU)
  • JOSN数据转换和解析
  • 浅析Linux内核中进程完全公平CFS调度
  • 安装 RustDesk 服务器 (适用 Rocky Linux, CentOS, RHEL 系列发行版)
  • 23种设计模式-策略模式
  • C#开发的OpenRA的游戏主界面怎么样创建
  • 考研还是工作?两战失败老道有话说
  • 引用是否有地址的讨论的
  • 1、JAVA 开发环境搭建 - JDK 的安装配置
  • 【Storm】【六】Storm 集成 Redis 详解
  • 算法代码题——模板
  • CentOS 7.9汇编语言版Hello World
  • CoreData数据库探索
  • FreeRTOS入门
  • JVM运行时数据区划分
  • 重装系统一半电脑蓝屏如何解决
  • SpringBoot(tedu)——day01——环境搭建
  • springboot整合redis
  • 【Java】Spring Boot下的MVC
  • 【项目精选】 塞北村镇旅游网站设计(视频+论文+源码)
  • 十、Spring IoC注解式开发
  • Linux系统GPIO应用编程
  • 手敲Mybatis-反射工具天花板
  • Java -数据结构,【优先级队列 / 堆】
  • Python+Qt指纹录入识别考勤系统
  • K_A14_004 基于STM32等单片机驱动旋转角度传感器模块 串口与OLED0.96双显示
  • 2023年全国最新机动车签字授权人精选真题及答案12
  • Linux小黑板(10):信号
  • GO 语言基础语法一 (快速入门 Go 语言)
  • Java高效率复习-SpringMVC[SpringMVC-2]