编程语言之C++诞生记!

news2024/11/25 13:10:21

成长路上不孤单😊😊😊😊😊😊

【14后😊///C++爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】

今日分享关于C++诞生的相关内容!

关于【C++诞生】

目录:

  • 一、什么是C++语言
  • 二、C++语言的发展历程
  • 三、C++语言特点
  • 四、C++语言的优缺点
  • 五、C++语言的工作原理
  • 六、C++语言的应用领域

一、什么是C++

C++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生 [17],最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。 

C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。 C++几乎可以创建任何类型的程序:游戏、设备驱动程序、HPC、云、桌面、嵌入式和移动应用等。 甚至用于其他编程语言的库和编译器也使用C++编写。 

C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

二、C++发展历程

1970年,AT&T贝尔实验室的工作人员D.Ritchie和K.Thompson共同研发了C语言。研制C语言的初衷是用它编写UNIX系统程序,因此,实际上C语言是UNIX的“副产品”。

1971年,瑞士联邦技术学院N.Wirth教授发明了第一个结构化的编程语言Pascal。

20世纪70年代中期,本贾尼·斯特劳斯特卢普在剑桥大学计算机中心工作。斯特劳斯特卢普希望开发一个既要编程简单、正确可靠,又要运行高效、可移植的计算机程序设计语言。而以C语言为背景,以Simula思想为基础的语言,正好符合斯特劳斯特卢普的初衷和设想。

1979年,本贾尼·斯特劳斯特卢普到了AT&T贝尔实验室,开始从事将C改良为带类的C(C with classes)的工作。、1983年,该语言被正式命名为C++。 

C++是由‌C语言扩展升级而来的高级程序设计语言,最早于1979年由‌本贾尼·斯特劳斯特卢普在‌AT&T贝尔实验室研发。‌ C++结合了C语言的过程化程序设计和面向对象的程序设计,支持封装、继承和多态等特性。‌

C++的诞生背景可以追溯到C语言的发展。C语言在70年代初问世,由美国电话电报公司(AT&T)贝尔实验室于1978年正式发表。C++是在C语言的基础上进行扩展和升级的,旨在提高程序的抽象层次和复用性。

C++的诞生不仅是为了解决C语言在面向对象编程方面的不足,还为了提供更高的编程效率和更好的程序结构。C++通过引入类和对象的概念,使得程序更加模块化和易于管理。

1985年、1990年和1994年,C++先后进行3次主要修订。

C++的标准化工作于1989年开始 ,并成立了一个ANSI和ISO(International Standards Organization)国际标准化组织的联合标准化委员会。

1994年1月25曰,联合标准化委员会提出了第一个标准化草案。在该草案中,委员会在保持斯特劳斯特卢普最初定义的所有特征的同时,还增加了部分新特征。 

在完成C++标准化的第一个草案后不久,亚历山大·斯特潘诺夫(Alexander Stepanov)创建了标准模板库(Standard Template Library,STL)。在通过了标准化第一个草案之后,联合标准化委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出了C++的最初定义范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。

1997年11月14日,联合标准化委员会通过了该标准的最终草案。

1998年,C++的ANSI/IS0标准被投入使用。 

三、C++语言特点

  • 与C语言的兼容性

C++与C语言完全兼容,C语言的绝大部分内容可以直接用于C++的程序设计,用C语言编写的程序可以不加修改地用于C++。 

  • 数据封装和数据隐藏

在C++中,类是支持数据封装的工具,对象则是数据封装的实现。C++通过建立用户定义类支持数据封装和数据隐藏。

在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义。对象被说明为具有一个给定类的变量。每个给定类的对象包含这个类所规定的若干私有成员、公有成员及保护成员。完好定义的类一旦建立,就可看成完全封装的实体,可以作为一个整体单元使用。类的实际内部工作隐藏起来,使用完好定义的类的用户不需要知道类的工作原理,只要知道如何使用它即可。

  • 支持继承和重用

在C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员。

  • 多态性

采用多态性为每个类指定表现行为。多态性形成由父类和它们的子类组成的一个树型结构。在这个树中的每个子类可以接收一个或多个具有相同名字的消息。当一个消息被这个树中一个类的一个对象接收时,这个对象动态地决定给予子类对象的消息的某种用法。多态性的这一特性允许使用高级抽象。

继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。由于多态性,一个对象可有独特的表现方式,而另一个对象有另一种表现方式。 

四、C++优缺点

C++作为一种广泛使用的编程语言,具有一系列的优点和缺点。

优点

  1. 高性能‌:C++是一种编译型语言,可以直接在硬件上运行,因此执行速度非常快。这使得C++成为对性能要求极高的应用程序(如操作系统、游戏引擎、实时交易系统等)的首选语言‌。
  2. 灵活性和控制力‌:C++提供了对硬件和内存的精细控制,允许程序员直接操作内存地址、进行位运算等。这种灵活性使得C++能够编写出高效且资源消耗低的程序‌。
  3. 面向对象编程‌:C++支持面向对象编程(OOP)范式,包括封装、继承和多态等特性。这使得C++能够构建出模块化、可重用和易于维护的代码库‌。
  4. 广泛的库支持‌:C++拥有庞大的标准库(STL)和第三方库,涵盖了从数据结构到网络编程的各个方面。这些库为开发者提供了丰富的工具和资源,加速了开发过程‌。
  5. 跨平台性‌:C++编写的代码可以在不同的操作系统和硬件上编译和运行,只需针对不同的平台进行适当的配置和编译即可‌。
  6. C语言的兼容性‌:C++是C语言的超集,这意味着C++代码可以很容易地与C语言代码进行交互,可以利用现有的C语言库和代码资源‌。

缺点

  1. 复杂性‌:C++的复杂性是其最大的缺点之一。语言本身包含了大量的特性和语法规则,这使得初学者很难快速掌握。此外,C++的编译错误和运行时错误也可能很难调试‌。
  2. 内存管理‌:虽然C++提供了对内存的精细控制,但也带来了内存泄漏和指针错误等风险。程序员需要手动管理内存分配和释放,这增加了出错的可能性‌。
  3. 编译时间‌:由于C++是一种编译型语言,其编译时间可能相对较长,尤其是在处理大型项目时。这可能会影响开发效率‌。
  4. 学习曲线‌:C++的学习曲线相对较陡,需要投入大量的时间和精力来掌握其复杂的特性和最佳实践。这对于初学者来说可能是一个挑战‌。
  5. 代码可读性‌:C++的代码可能会因为使用了复杂的模板、宏和指针而变得难以阅读和理解。这可能会影响代码的维护性和可移植性‌。
  6. 社区支持‌:尽管C++有庞大的用户群和社区支持,但与一些更现代的编程语言相比,其社区可能不如它们活跃和易于访问。这可能会使初学者在寻求帮助时遇到困难‌。

综上所述,C++具有高性能、灵活性和面向对象编程等优点,但也存在复杂性、内存管理问题和学习曲线等缺点。在选择是否使用C++时,需要根据项目的具体需求和团队的技术栈来综合考虑。

五、工作原理

C++语言的程序开发环境,为了方便测试,将调试环境做成了解释型。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。 

开发C++应用程序,需要经过编写源程序、编译、连接程序生成可执行程序、运行程序四个步骤 [23]。生成程序是指将源码(C++语句)转换成一个可以运行的应用程序的过程。如果程序编写正确,那么通常只需按一个功能键,即可完成该过程。

第一步对程序进行编译,这需要用到编译器(compiler)。编译器将C++语句转换成机器码(也称为目标码);如果该步骤成功执行,下一步就是对程序进行链接,这需要用到链接器(linker)。链接器将编译获得机器码与C++库中的代码进行合并。C++库包含了执行某些常见任务的函数(“函数”是子程序的另一种称呼)。例如,一个C++库中包含标准的平方根函数sqrt,所以不必亲自计算平方根。C++库中还包含一些子程序,它们把数据发送到显示器,并知道如何读写硬盘上的数据文件。

六、C++语言的应用领域‌

  1. 软件开发‌:C++是一种通用编程语言,适用于开发许多不同类型的软件,包括桌面应用程序、‌Web应用程序、‌操作系统等。许多大型软件项目如‌Adobe Photoshop、‌Microsoft Office、‌Mozilla Firefox等都是使用C++编写的。
  2. 游戏开发‌:C++在游戏开发领域非常流行,许多游戏引擎和游戏开发工具都是使用C++编写的,如‌Unity、‌Unreal Engine等。
  3. 系统工程‌:在系统工程领域中,C++语言是不可或缺的,许多计算机操作系统和底层软件都是使用C++编写的。
  4. 人工智能‌:C++在人工智能领域也扮演着重要角色,可以通过高效的内存管理和快速的运行速度来优化深度学习框架。
  5. 金融领域‌:由于C++是一种高效的编程语言,因此在金融领域中广泛使用,用于编写交易系统和高频交易系统。
  6. 操作系统开发‌:C++是开发操作系统所必需的编程语言之一,许多流行的操作系统如‌Windows和‌Linux都是使用C++编写的。
  7. 大数据分析‌:C++语言具有高强的计算性能和数据处理能力,因此在大规模数据分析和计算领域也有着广泛应用。

在各个领域中的具体应用实例

  • 软件开发‌:Adobe Photoshop、Microsoft Office、Mozilla Firefox等大型软件项目都是使用C++编写的。
  • 游戏开发‌:许多游戏引擎和游戏开发工具如Unity、Unreal Engine都是使用C++编写的。
  • 系统工程‌:许多计算机操作系统和底层软件如Windows、Linux、Apache等都使用C++编写。
  • 人工智能‌:C++可以用于优化深度学习框架如Caffe和TensorFlow。
  • 金融领域‌:C++用于编写高频交易系统和交易软件,以实现快速数据处理。
  • 大数据分析‌:C++在数据挖掘、机器学习、图形计算和科学计算等领域中有着广泛应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

核心差异:知识VS文档管理(+工具软件安利)

在讨论知识管理和文档管理时,我们经常会听到这两种说法被混淆使用。然而,它们各自服务于不同的目的,这一点至关重要。 想象一下,你是一名项目经理,面临以下两项任务: 存储最新的项目计划捕捉团队讨论中获…

医院挂号就诊系统(源码+数据库+报告)

基于SpringBoot的医院挂号就诊系统,系统包含三种角色:管理员、医生、用户,系统分为前台和后台两大模块,主要功能如下。 前台: - 首页:展示医院相关信息、推荐医生等内容。 - 健康教育:提供健康知识、文章等…

【热门主题】000065 探索人工智能学习框架:开启智能未来的钥匙

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…

《智慧教育实时数据分析推荐项目》详细分析

一、项目介绍 1、背景介绍 在互联网、移动互联网的带动下,教育逐渐从线下走向线上,在线教育近几年一直处于行业的风口浪尖,那随着基础设施的不断完善,用户需求也发生不少变化,因此传统教育机构、新兴互联网企业都在探…

使用LUKS对Linux磁盘进行加密

前言 本实验用于日常学习用,如需对存有重要数据的磁盘进行操作,请做好数据备份工作。 此实验只是使用LUKS工具的冰山一角,后续还会有更多功能等待探索。 LUKS(Linux Unified Key Setup)是Linux系统中用于磁盘加密的一…

在 cmd 输入 python.exe 后不报错也无反应的问题

在 cmd 输入 python.exe 后不报错:‘python.exe ’不是内部或外部命令,也不是可运行的程序或批处理文件,也无反应。只是显示这样一个弹窗: 查了下环境变量path,看看有什么地方有python.exe,发现原来在C:\Us…

10、PyTorch autograd使用教程

文章目录 1. 相关思考 1. 相关思考

如何在 Ubuntu 22 04 上安装和配置 Ansible 自动化平台

如何在 Ubuntu 22.04 上安装和配置 Ansible 自动化平台 简介 Ansible 是一个开源项目,并在 Github 上收获了 63k 的 star 。它是一个极其简单的 IT 自动化平台,使您的应用程序和系统更易于部署和维护。使用 SSH,以接近简单英语的语言实现从…

PowerMILL 客制化宏 - 用户菜单定义

用户右键菜单 在PowerMILL元素浏览器空白的地方右键弹出的菜单叫用户右键菜单。用户右键菜单可以调用宏或命令或用户二次开发的应用或批处理等等。 用户右键菜单定义 用户右键菜单需要建立一个没有扩展名的 “user_menu” 名称的文件,一般存放在 “C:\dcam\pmill2…

006 单片机嵌入式中的C语言与代码风格规范——常识

00 环境准备: 配置MDK支持C99 内置stdint.h介绍 stdint.h 是从 C99 中引进的一个标准 C 库的文件 路径:D:\MDK\ARM\ARMCC\include 01 C语言基础语法 一般的bug很有可能是C语言功底不扎实导致…… 1.结构体 由若干基本数据类型集合组成的一种自定义数…

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part1

资料来自李宏毅老师《生成式 AI》课程,如有侵权请通知下线 Introduction to Generative AI 2024 Spring 该文档主要介绍了国立台湾大学(NTU)2024 年春季 “生成式人工智能(GenAI)” 课程的作业 5(GenAI HW…

ZYNQ-7020嵌入式系统学习笔记(1)——使用ARM核配置UART发送Helloworld

本工程实现调用ZYNQ-7000的内部ARM处理器,通过UART给电脑发送字符串。 硬件:正点原子领航者-7020 开发平台:Vivado 2018、 SDK 1 Vivado部分操作 1.1 新建工程 设置工程名,选择芯片型号。 1.2 添加和配置PS IP 点击IP INTEGR…

JSONCPP 数据解析与序列化

常用类接口 Json::Value 类 用于存储 JSON 数据的核心类。它支持将数据解析为对象、数组或基本类型(如字符串、数值等) 赋值操作符:Value& operator(Value other); 用于将一个 JSON 值赋给另一个 JSON 值 Json::Value value; value &…

排序(Java数据结构)

1. 排序的概念及引用 1.1 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。(所有的排序都是默认从小到大排序) 稳定性:假定在待排序的记录序列中&#xff…

JavaParser 的全面介绍

JavaParser 是什么? JavaParser 的快速介绍可以参考: # JavaParser的快速介绍 JavaParser是一个用于解析Java源码的开源工具,它提供了一种简单而有效的方式来解析和操作Java代码。JavaParser解析源码的方式主要基于其将Java代码转换为抽象语…

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动,先不着急直接上手撸应用层的代码,先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码(vlc好像不支持h265,这个后边我试试)的视频流,先需要支持上rtsp server,了解rtsp协议是必…

大数据新视界 -- Hive 数据分区:精细化管理的艺术与实践(上)(7/ 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

strlwr(arr);的模拟实现(c基础)

hi , I am 36 适合对象c语言初学者 strlwr(arr)&#xff1b;函数是把arr数组变为小写字母,并返回arr 链接介绍一下strlwr(arr)&#xff1b;(c基础)-CSDN博客 下面进行My__strlwr(arr);模拟实现 #include<stdio.h> //返回值为arr(地址),于是用指针变量,原数组为字符型…

【Pytest+Yaml+Allure】实现接口自动化测试框架

一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想&#xff0c;将代码与数据分离&#xff0c;易维护&#xff0c;易上手。使用yaml编写编写测试用例&#xff0c;利用requests库发送请求&#xff0c;使用pytest管理用例&#xff0c;allure生成…

Sigrity SPEED2000 General SI Simulation模式如何进行信号仿真分析操作指导-DDR

Sigrity SPEED2000 General SI Simulation模式如何进行信号仿真分析操作指导-DDR Sigrity SPEED2000 General SI Simulation模式可以对信号进行仿真分析,仿真将电源视为理想电源,以下图为例进行说明 附带驱动和接收端的IBIS模型 2D 视图