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

C++的介绍与认识

目录

前言

1.什么是C++

2.C++的发展历史

3.C++参考文档

4.C++重要性

4.1C++特点

4.2编程语言排行榜

4.3 C++的应用领域

5.C++学习指南

1. 基础知识

2. 面向对象编程(OOP)

3. 泛型编程

4. 标准库(STL)

结束语

前言

学习了C语言的知识,今天小编将进军C++的知识,本篇博客可能略微枯燥,主要是对C++的相关介绍和认识,以及学习路线,下节将正式进入C++的学习。

1.什么是C++

C++起源于C语言,但通过引入面向对象编程(OOP)和泛型编程的特性,使其功能更为丰富和灵活。它被广泛应用于系统/应用程序开发、游戏开发、嵌入式系统等领域,因其性能优越和可扩展性而受到程序员的青睐。

2.C++的发展历史

C++的起源可以追溯到1979年,当时Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地方可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作系统的开发工作,他感受到了现有语言(如C语言)在表达能力、可维护性和可扩展性方面的不足。
1983年,Bjarne Stroustrup在C语言的基础上添加了面向对象编程的特性,设计出了C++语言的雏形,此时的C++已经有了类、封装、继承等核心概念,为后来的面向对象编程奠定了基础。这一年该语言被 正式命名为C++。
在随后的几年中,C++在学术界和工业界的应用逐渐增多。一些大学和研究所开始将C++作为教学和研 究的首选语言,而一些公司也开始在产品开发中尝试使用C++。这一时期,C++的标准库和模板等特性 也得到了进一步的完善和发展。
C++的标准化⼯作于1989年开始,并成立了一个ANSI和ISO(International Standards
Organization)国际标准化组织的联合标准化委员会。1994年标准化委员会提出了第一个标准化
案。在该草案中,委员会在保持斯特劳斯特卢普最初定义的所有特征的同时,还增加了部分新特征。
在完成C++标准化的第一个草案后不久,STL(Standard Template Library)是惠普实验室开发的一系 列软件的统称。它是AlexanderStepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。在通过了标准化第一个草案之后,联合标准化委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出C++的最初定义范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。
1997年11月14日,联合标准化委员会通过了该标准的最终草案。1998年,C++的ANSI/IS0标准被投入使用。
5b45fbb6d1a14b4bbb9b5cd1a34f110d.png

3.C++参考文档

https://legacy.cplusplus.com/reference/
https://zh.cppreference.com/w/cpp
https://en.cppreference.com/w/
说明:第一个链接不是C++官方文档,标准也只更新到C++11,但是以头文件形式呈现,内容比较易看好懂。后两个链接分别是C++官方文档的中文版和英文版,信息很全,更新到了最新的C++标准,但是相比第一个不那么易看;几个文档各有优势,可以结合着使用。

4.C++重要性

C++是一种具有广泛应用和深远影响的编程语言,无论是系统开发、游戏编程、还是嵌入式系统,C++都发挥着至关重要的作用。

4.1C++特点

1. 高性能和效率
C++的一个显著特点是其高性能和高效性。通过直接访问硬件和内存,C++允许开发者编写优化的代码,从而实现出色的运行速度和资源管理。这使得C++在需要高性能计算的领域中,如游戏开发、图形渲染和科学计算,成为首选的编程语言。
2. 面向对象编程
C++引入了面向对象编程(OOP)的概念,包括类、继承和多态性。这使得开发者可以通过抽象和封装来提高代码的可维护性和可扩展性。面向对象编程使得复杂系统的设计和实现变得更加直观和模块化。
3. 泛型编程和模板
C++的模板机制允许编写泛型代码,这不仅提高了代码的复用性和灵活性,还减少了冗余代码的编写。通过模板,开发者可以创建通用的数据结构和算法,从而提高开发效率和代码质量。
4. 标准库(STL)
C++标准库(STL)提供了丰富的工具集,包括各种容器(如vector、map、set)和算法(如排序、查找)。STL极大地简化了数据管理和操作,使开发者能够专注于核心业务逻辑,而无需从头实现复杂的数据结构和算法。
5. 广泛的应用领域
C++在多个领域中都有着广泛的应用:
系统编程:由于其高效性,C++常用于操作系统、驱动程序和底层系统组件的开发。
游戏开发:C++的高性能和强大的图形处理能力使其成为游戏引擎开发的首选语言,如Unreal Engine和Unity。
嵌入式系统:C++的灵活性和低级硬件访问能力使其适用于嵌入式系统和物联网设备的开发。 - ** 金融工程:在高频交易和金融建模中,C++因其高性能和可靠性被广泛使用。
6. 社区和生态系统
C++拥有一个庞大的开发者社区和丰富的生态系统。从开源库和框架,到在线资源和教程,C++开发者可以轻松找到所需的支持和工具。这种强大的社区支持使得C++在现代编程语言中保持了持久的生命力和创新力。

4.2编程语言排行榜

TIOBE排⾏榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如
Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube和Baidu(百度)统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
2024年6月TIOBE发布的编程语言排行榜
54444c88f2f8429989204b5141712b1f.png

4.3 C++的应用领域

C++的应用领域服务器端、游戏(引擎)、机器学习引擎、音视频处理、嵌入式软件、电信设备、金融应用、基础库、操作系统、编译器、基础架构、基础工具、硬件交互等很多方面都有。
1. 大型系统软件开发。如编译器、数据库、操作系统、浏览器等等
2. 音视频处理。常见的音视频开源库和方案有FFmpeg、WebRTC、Mediasoup、ijkplayer,音视频 开发最主要的技术栈就是C++。
3. PC客户端开发。一般是开发Windows上的桌面软件,⽐如WPS之类的,技术栈的话⼀般是C++和QT,QT 是一个跨平台的 C++图形用户界面(Graphical User Interface,GUI)程序。
4. 服务端开发。各种大型应用网络连接的高并发后台服务。这块Java也比较多,C++主要用于一些对性能要求比较高的地方。如:游戏服务、流媒体服务、量化高频交易服务等
5. 游戏引擎开发。很多游戏引擎就都是使用C++开发的,游戏开发要掌握C++基础和数据结构,学习图形学知识,掌握游戏引擎和框架,了解引擎实现,引擎源代码可以学习UE4、Cocos2d-x等开源引擎实现
6. 嵌入式开发。嵌入式把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,通过软件能够控制这些装置。比如:智能手环、摄像头、扫地机器人、智能音响、门禁系统、车载系统等等,粗略⼀点,嵌入式开发主要分为嵌入式应用和嵌入式驱动开发。
7. 机器学习引擎。机器学习底层的很多算法都是用C++实现的,上层用python封装起来。如果只想准备数据训练模型,那么学会Python基本上就够了,如果想做机器学习系统的开发,那么需要学 会C++。
8. 测试开发/测试。每个公司研发团队,有研发就有测试,测试主要分为测试开发和功能测试,测试开发一般是使用一些测试工具(selenium、Jmeter等),设计测试用例,然后写⼀些脚本进行自动化测试,性能测试等,有些还需要自行开发一些测试用具。功能测试主要是根据产品的功能,设计测试用例,然后手动的方式进行测试。

5.C++学习指南

1. 基础知识

在学习C++时,首先要掌握其基本语法和语义。C++继承了C语言的许多特性,如变量声明、控制流(if-else、for、while循环)、基本数据类型(例如int、double、string)等。
变量和数据类型:了解不同的数据类型和如何声明变量,以及它们在内存中的存储方式和限制。
运算符:包括算术运算符、逻辑运算符和比较运算符的使用方法。
流控制:理解条件语句(if-else)、循环语句(for、while)及其在编程中的应用。

2. 面向对象编程(OOP)

C++的一个重要特性是面向对象编程,这使得代码更易于维护、扩展和重用。
重要的OOP概念:
类与对象:学习如何定义类和创建对象,以及如何使用成员函数和数据成员。
继承与多态:掌握如何建立继承关系,派生类的定义,以及多态如何实现基类指针的多种形态。 

3. 泛型编程

泛型编程通过模板(templates)提供了一种编写通用代码的方法,使得数据结构和算法可以与数据类型无关地工作。
重要的概念包括: 函数模板和类模板:了解如何定义和使用模板,以及如何通过模板实现通用的算法和数据结构。

4. 标准库(STL)

C++标准库(STL)提供了丰富的数据结构和算法,使得开发者能够更高效地进行编程。
一些常用的STL组件包括: 容器:例如vector、map、set等,用于存储和管理数据。
算法:包括排序、查找、迭代等,能够直接应用于STL容器。 

结束语

相信通过本篇博客,大家对C++有了进一步的理解和认识,最后感谢大家的阅读与支持!!!

相关文章:

C++的介绍与认识

目录 前言 1.什么是C 2.C的发展历史 3.C参考文档 4.C重要性 4.1C特点 4.2编程语言排行榜 4.3 C的应用领域 5.C学习指南 1. 基础知识 2. 面向对象编程(OOP) 3. 泛型编程 4. 标准库(STL) 结束语 前言 学习了C语言的知识…...

Spark源码详解

https://www.cnblogs.com/huanghanyu/p/12989067.html#_label3_3...

浅尝Apache Mesos

文章目录 1. Mesos是什么2. 共享集群3. Apache Mesos3.1 Mesos主节点3.2 Mesos代理3.3 Mesos框架 4. 资源管理4.1 资源提供4.2 资源角色4.3 资源预留4.4 资源权重与配额 5. 实现框架5.1 框架主类5.3 实现执行器 6. 小结参考 1. Mesos是什么 Mesos是什么,Mesos是一个…...

buuctf题目讲解-1

一眼就解密 ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30 flag{THEFLAGOFTHISSTRING} base家族 base64 加密原理: 明文:abc 去找ascii码的二进制形式 a-->97-→01100001 (二进制为8位如果不足8位则在最左边补0至8位) b-→…...

软件测试学习之-ADB命令

ADB命令 adb工具即Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。在某些特殊的情况下进入不了系统,adb就派上用场啦! Android程序的开发通常需要使用到一…...

Redis的入门导读(一)

目录 单机架构 分布式系统 个人总结 一.Redis的介绍 二.Redis特性 三.Redis的快原因 四.Redis的应用场景 五.Redis的总结 由于Redis和分布式系统息息相关,因此我们需要先了解一下,分布式系统! 接下来就是分布式系统的演化过程。 单…...

H5与小程序:两者有何不同?

H5,即HTML5,是构建Web内容的一种语言描述方式,也是互联网的下一代标准,被认为是互联网的核心技术之一。HTML5是在HTML4.01的基础上进行了一定的改进后的规范,用户在使用任何手段进行网页浏览时看到的内容原本都是HTML格…...

计算机视觉、目标检测、视频分析的过去和未来:目标检测从入门到精通 ------ YOLOv8 到 多模态大模型处理视觉基础任务

文章大纲 计算机视觉项目的关键步骤计算机视觉项目核心内容概述步骤1: 确定项目目标步骤2:数据收集和数据标注步骤3:数据增强和拆分数据集步骤4:模型训练步骤5:模型评估和模型微调步骤6:模型测试步骤7:模型部署常见问题目标检测入门什么是目标检测目标检测算法的分类一阶…...

7月10日学习打卡,环形链表+栈OJ

前言 大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有…...

鸿蒙语言基础类库:【@ohos.util.TreeSet (非线性容器TreeSet)】

非线性容器TreeSet 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 T…...

freemarker生成pdf,同时pdf插入页脚,以及数据量大时批量处理

最近公司有个需求&#xff0c;就是想根据一个模板生成一个pdf文档&#xff0c;当即我就想到了freemarker这个远古老东西&#xff0c;毕竟freemarker在模板渲染方面还是非常有优势的。 准备依赖&#xff1a; <dependency><groupId>org.springframework.boot</gr…...

勇攀新高峰|暴雨信息召开2024年中述职工作会议

7月8日至9日&#xff0c;暴雨信息召开2024年中述职工作会议&#xff0c;总结回顾了上半年的成绩和不足&#xff0c;本次会议采用线上线下的方式举行&#xff0c;公司各部门管理人员、前台市场营销人员参加述职&#xff0c;公司领导班子出席会议。 本次述职采取了现场汇报点评的…...

C++:filter2D函数简要概述

OpenCV中的filter2D函数是一个非常强大的工具&#xff0c;用于对图像进行卷积操作&#xff0c;从而应用各种线性滤波器。这个函数能够处理图像中的每个像素&#xff0c;通过将其与指定的卷积核&#xff08;或称为滤波器&#xff09;进行卷积运算&#xff0c;来修改图像的特性。…...

Postman使用教程【项目实战】

目录 引言软件下载及安装项目开发流程1. 创建项目2. 创建集合(理解为&#xff1a;功能模块)3. 设置环境变量&#xff0c;4. 创建请求5. 测试脚本6. 响应分析7. 共享与协作 结语 引言 Postman 是一款功能强大的 API 开发工具&#xff0c;它可以帮助开发者测试、开发和调试 API。…...

微软Phi-3:小型而强大的AI模型解析与实战指南

微软Phi-3&#xff1a;小型而强大的AI模型解析与实战指南 引言 随着人工智能技术的飞速发展&#xff0c;小型而高效的AI模型逐渐成为研究与应用的新热点。微软研究院推出的Phi-3系列模型&#xff0c;以其卓越的性能和高效的成本效益&#xff0c;在AI领域引起了广泛关注。本文…...

Python 获取 SQL 指纹和 HASH 值

前言 本文介绍一个提取 SQL 指纹的方法&#xff0c;就是将 SQL 语句的条件转换为 &#xff1f;可用于脱敏和 SQL 聚类分析的场景。 1. 工具安装 这里用到的工具&#xff0c;就是 pt 工具集中的 pt-fingerprint 含在 Percona Toolkit 中&#xff0c;安装方法可参考 Percona T…...

基于OpenCv的快速图片颜色交换,轻松实现图片背景更换

图片颜色更换 图片颜色转换 当我们有2张图片,很喜欢第一张图片的颜色,第2张图片的前景照片,很多时候我们需要PS进行图片的颜色转换,这当然需要我们有强大的PS功底,当然小编这里不是介绍PS的,我们使用代码完全可以代替PS 进行图片的颜色转换 图片颜色转换步骤: 步骤…...

在Linux下直接修改磁盘镜像文件的内容

背景 嵌入式Linux系统通常在调试稳定后&#xff0c;会对磁盘&#xff08;SSD、NVME、SD卡、TF卡&#xff09;做个镜像&#xff0c;通常是.img后缀的文件&#xff0c;以后组装新设备时&#xff0c;就将镜像文件烧录到新磁盘即可&#xff0c;非常简单。 这种方法有个不便之处&a…...

ASP.NET Core----基础学习03----开发者异常页面 MVC工作原理及实现

文章目录 1. 开发者异常页面(1)Startup.cs 页面的基础配置(2)自定义显示报错代码的前后XX行 2. MVC 的原理3. MVC 的实现4.默认路由路径5.返回Json字符串 1. 开发者异常页面 (1)Startup.cs 页面的基础配置 namespace ASP.Net_Blank {public class Startup{private readonly IC…...

jvm 07 GC算法,内存池,对象内存分配

01 垃圾判断算法 1.1引用计数算法 最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数&#xff0c;每多一个其他对象引用&#xff0c;计数1&#xff0c; 当引用失效时&#xff0c;计数-1&#xff0c;如果计数0&#xff0c;表示没有其他对象引用&#xff0c;…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...