01-C++基础

c++概述

1. 概述

1.1 简介

“c++” 中的 ++ 来自于 c 语言中的递增运算符++,该运算符将变量加 1。 c++起初也叫”c with class”。通过名称表明, c++是对 c 的扩展,因此 c++是 c 语言的超集,这意味着 任何有效的 c 程序都是有效的 c++程序。 c++程序可以使用已有的 c 程序库。

编程模块的集合,可以在程序中调用它们。库对很多常见的编程问题提供了可靠的解决方法,因此可以节省程序员大量的时间和工作量

c++语言在 c 语言的基础上添加了 面向对象编程和 泛型编程的支持。 c++继承了 c语言高效,简洁,快速和可移植的传统。

所以c++融合了 3 种不同的编程方式:

  • c 语言代表的过程性语言
  • c++在 c 语言基础上添加的类代表的面向对象语言.
  • c++模板支持的泛型编程

c 语言和 c++语言的关系:

c++语言是在 c 语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“c/c++”。

c 语言和 c++并不是对立的竞争关系:

  1. c++是 c 语言的加强,是一种更好的 c 语言。
  2. c++是以 c 语言为基础的,并且完全兼容 c 语言的特性。

c 语言和 c++语言的学习是可以相互促进。学好 c 语言,可以为我们将来进一步地学习 c++语言打好基础,而 c++语言的学习,也会促进我们对于 c 语言的理解,从而更好地运用 c 语言。

1.2 起源

与 c 语言一样, c++也是在贝尔实验室诞生的, Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)在 20 世纪 80 年代在这里开发了这种语言。

Stroustrup 关心的是让 c++更有用,而不是实施特定的编程原理或风格。在确定语言特性方面,真正的编程比纯粹的原理更重要。 Stroustrup 之所以在 c 的基础上创建 c++,是因为 c 语言简洁、适合系统编程、使用广泛且与 UNIX 操作系统联系紧密。

用他自己的话来说, “c++主要是为了我的朋友和我不必再使用汇编语言、 c 语言或者其他现代高级语言来编程而设计的。它的主要功能是可以更方便得编写出好程序,让每个程序员更加快乐”。

假设为运行 windows 2000 的老式奔腾 pc 编写了一个很好用的 c++程序,而管理员决定使用不同操作系统(比如说 Mac OS 或 Linux)和处理器的计算机替换它。该程序是否可在新平台运行呢?当然,但是必须使用为新平台设计的 c++编译器重新编译。但是是否需要修改写好的代码?

如果不需要修改代码的情况下,重新编译程序后,程序依然运行良好,该程序是可移植的。

程序是否可移植性有两个问题需要解决。

  • 第一是硬件,针对特定硬件编程的程序是不可移植的。
  • 第二,语言的实现, windows xp c++ 和 Redhat Linux 或 Mac OS X 对c++的实现不一定相同。

虽然我们希望 c++版本与其他版本兼容,但是如果没有一 个公开的标准,很难做到。

因此,美国国家标准局(American National Standards Institute,ANSI)在 1990 年设立一个委员会专门负责制定 c++标准(ANSI 制定了 c 语
言的标准)。国际标准化组织(International Organization for Standardization, ISO)很快通过自己的委员会加入到这个行列,创建了联合组织 ANSI/ISO,制定 c++标准。

经过多年的努力,制定出了一个国际标准 ISO/IEc 14882:1998 ,并于 1998 年获得了 ISO、 IEc(International Electrotechnical committee,国际电工技术委员会)和ANSI 的批准。这个标准就是我们经常所说的 c++98。 它不仅描述了已有的 c++特性,还对语言进行了扩展,添加了异常、运行阶段类型识别(RTTI)、模板和标准模板库(STL)。

2003 年,发布了 c++标准第二版(IOS/IEc 14882:2003),这一版本对第一版修订了一些错误,但并没有改变语言特性,因此 c++98 表示 ++98/c++2003。

c++不断发展。 IOS 标准委员会于 2011 年 8 月批准了新标准 ISO/IEc 14882:2011,该标准被称为 c++11,与 c++98 一样 c++11 也新增了许多特性。

ISO c++标准还吸收了 ANSI c 语言标准, c++尽量做到是 c 的超集。意味着在理想情况下,任何有效的 c 程序都应该是有效的 c++程序。

ANSI 不仅定义了 c 语言,还 定义了一个 ANSI c 必须实现的标准 c 库。 c++也在使用这个库,另外 ANSI/ISO c++标准还提供了一个 c++标准类库。

2. 初始

2.1 安装QT

Qt [1] 是一个 1991 年由 Qt company 开发的跨平台 c++图形用户界面应用程序开发框架。

它既可以开发 GUI 程序,也可用于开发非 GUI 程序,比如控制台工具和服务器。

Qt 是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object compiler, moc))以及一些宏, Qt 很容易扩展,并且允许真正地组件编程。

2008 年, Qt company 科技被诺基亚公司收购, Qt 也因此成为诺基亚旗下的编程语言工具。

2012 年, Qt 被 Digia 收购。

2014 年 4 月,跨平台集成开发环境 Qt creator 3.1.0 正式发布,实现了对于 iOS 的完全支持,新增 WinRT、 Beautifier 等插件,废弃了无 Python 接口的 GDB 调试支持,集成了基于 clang 的 c/c++代码模块,并对 Android 支持做出了调整,至此实现了全面支持 iOS、 Android、 WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上, Qt 同 X Window 上的 Motif, Openwin, GTK 等图形界面库和 Windows 平台上的 MFc, OWL, VcL, ATL 是同类型的东西。

QT 界面:

在这里插入图片描述

2.2 c++的 Hello World

第一个 helloworld 程序:

#include <iostream>using namespace std;int main(int argc, char *argv[])
{cout << "Hello World!" << endl;return 0;
}
// Hello World!

分析:

  • using namespace std; 表示 使用标准命名空间
  • cout << “hello world”<< endl; 和 printf 功能一样,输出字符串”hello wrold”

扩展:

  • 在 c 语言中头文件使用扩展名.h,将其作为一种通过名称标识文件类型的简单方式。但是 c++得用法改变了, c++头文件没有扩展名。但是有些 c 语言的头文件被转换为 c++的头文件,这些文件被重新命名,丢掉了扩展名.h(使之成为 c++风格头文件),并在文件名称前面加上前缀 c(表明来自 c 语言)。
  • namespace指标识符的各种可见范围。命名空间用关键字 namespace 来定义。命名空间是 c++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。
  • coutc++中的标准输出流endl输出换行并刷新缓冲区

3. 编程思想

3.1 面向过程

思考;将大象装进冰箱里

1,打开冰箱门
2,放入大象
3,关闭冰箱门

特点:只考虑事物的发展过程

面向过程编程思想的核心:功能分解,自顶向下,逐层细化(程序=数据结构+算法)。

3.2 面向对象

1,事物中存在那些对象大象,冰箱2,建立对象与对象的关系1,打开冰箱门2,放入大象3,关闭冰箱门

特点:

  • 先考虑事物中存在哪些对象,
  • 再建立对象与对象的关系

面向对象编程(Object-Oriented Programming)简称 OOP 技术,是开发计算机应用程序的一种新方法、新思想。过去的面向过程编程常常会导致所有的代码都包含在几个模块中,使程序难以阅读和维护。在做一些修改时常常牵一动百,使以后的开发和维护难以为继。而使用 OOP 技术,常常要使用许多代码模块,每个模块都只提供特定的功能,它们是彼此独立的,这样就增大了代码重用的几率,更加有利于软件的开发、维护和升级。

在面向对象中,算法与数据结构被看做是一个整体,称作对象,现实世界中任何类的对象都具有一定的属性和操作,也总能用数据结构与算法两者合一地来描述,所以可以用下面的等式来定义对象和程序:

  • 对象 = 算法 + 数据结构
  • 程序 = 对象 + 对象 + ……

从上面的等式可以看出,程序就是许多对象在计算机中相继表现自己,而对象则是一个个程序实体。

面向对象编程思想的核心:应对变化,提高复用。

3.3 面向对象的三大特性

封装

把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。

优点:

  • 保护内部、降低耦合度(制造和使用的关联性)、提高复用性、美观(代码可读性)
继承

继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力。

继承的作用:避免公用代码的重复开发,减少代码和数据冗余。

多态

多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。

3.4 类与对象

对象
真是存在的事物
多个对象抽取其共同点形成的概念,称为类。
类与对象的关系
先有类,后有对象
一个类可以有多个对象,多个对象可以属于同一个类

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

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

相关文章

《PySpark大数据分析实战》-11.Spark on YARN模式安装Hadoop

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

我的隐私计算学习——匿踪查询

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具&#xff0c;经由自己阅读后整理而成。 &#xff08;一&#xff09;PIR的介绍 ​ 匿踪查询&#xff0c;即隐私信息检索&#xff08;Private InformationRetrieval&#xff0c;PIR&#xff09;&#xff0c;是安全多方计算…

2012-12-12 下载ndk编译出so和可执行文件,放到android 真机运行,包含源码。

一、下载ndk链接NDK 下载 | Android NDK | Android Developers 二、解压ndk后得到下面的文件&#xff0c;里面包含ndk-build.cmd&#xff0c;这个是用来编译的。 三、Android.mk和C源码。完整源码下载路径https://download.csdn.net/download/qq_37858386/88622702 3.1 A…

k8s如何部署seata(分布式事务)?(第一篇)

k8s如何部署seata(分布式事务)&#xff1f; 官方传送门https://seata.io/zh-cn/ 快速入门SEATA Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站…

《Linux C编程实战》笔记:实现自己的ls命令

关键函数的功能及说明 1.void display_attribute(struct stat buf,char *name) 函数功能&#xff1a;打印文件名为name的文件信息&#xff0c;如 含义分别为&#xff1a;文件的类型和访问权限&#xff0c;文件的链接数&#xff0c;文件的所有者&#xff0c;文件所有者所属的组…

后端项目全局异常处理-使用RuntimeException自定义异常异常分类简单举例

接上篇&#xff1a;后端项目操作数据库-中枢组件Service调用Mapper 自定义异常&#xff1a; 手动抛出异常&#xff0c;为了后续统一捕获&#xff0c;需要异常自定义&#xff1b; 如&#xff1a;当使用抛出异常的方式表示“操作失败”时&#xff0c;为了后续统一捕获&#xff0c…

灯具照明行业MES/开源mes/灯具行业免费MES

一、万界星空科技开源MES系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、适合二开的开源MES。 1.万界星空开源MES制造执行系统的Java开源版本。 开源mes系统包括系统管理&#xff0c;车间基础数据管理&#xff0c;计划管…

Chapter 7 - 3. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理

Pause Threshold for Long Distance Links长途链路的暂停阈值 This section uses the following basic concepts: 本节使用以下基本概念: Bit Time (BT): It is the time taken to transmit one bit. It is the reciprocal of the bit rate. For example, BT of a 10 GbE po…

喝葡萄酒时观酒闻香尝味究竟有什么用?

对许多人来说&#xff0c;在品尝葡萄酒时能发现大多数人闻不到的香气和尝不到的味道似乎是一种神奇的能力。其他人则认为这是学究式葡萄酒爱好者过于活跃的想象&#xff0c;或者是保持葡萄酒鉴赏精英声誉的一种方式&#xff0c;但两者都不是。 部分是艺术&#xff0c;部分是科…

目前最火的大模型训练框架 DeepSpeed 详解来了

目前&#xff0c;大模型的发展已经非常火热&#xff0c;关于大模型的训练、微调也是各个公司重点关注方向&#xff0c;但是大模型训练的痛点是模型参数过大&#xff0c;动辄上百亿&#xff0c;如果单靠单个GPU来完成训练基本不可能。所以需要多卡或者分布式训练来完成这项工作。…

MBA-数学题概念和公式

{}公差大于零的等差数列:多个数字组成的数列&#xff0c;两两之间差相等,且后值减前值大于0&#xff0c;如&#xff1a;{-2,0,2,4}为公差数列为2的等差数列.因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数&#xff0c;10的因数为 2和5圆柱体表面积 2πr 2πrh球体表名…

生产环境_Apache Spark技术大牛的实践:使用DataFrame API计算唯一值数量并展示技术(属性报告)

业务背景 给前端提供算法集成好的数据&#xff0c;对算法处理后的数据进行进一步删选展示 可以使用下面代码运行一下看看结果&#xff0c;听有趣的&#xff0c;我写的代码中计算了不同字段的值的数量&#xff0c;并生成了一个显示字符串来描述这些数据的分布情况然后使用"…

MySQL数据库 DDL

目录 一、DDL 二、操作数据库 三、操作表 四、数据类型 五、表操作案例 六、修改表 七、删除表 一、DDL Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 。 二、操作数据库 &#xff08;1&am…

Git 使用教程(超级详细)

目录 一&#xff1a;Git二&#xff1a;SVN与Git的的区别三、安装Git四&#xff1a;常规操作五&#xff1a;远程仓库六&#xff1a;创建与合并分支七&#xff1a;bug分支八&#xff1a;多人协作九&#xff1a;git可视化工具 Git Git 是一种分布式版本控制系统&#xff0c;用于…

C# WPF上位机开发(加密和解密)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在报文传输的过程中&#xff0c;根据报文传输的形态&#xff0c;有两种形式&#xff0c;一种是明文传输&#xff0c;一种是加密传输。当然明文传输…

Python+Requests+Pytest+YAML+Allure实现接口自动化

本项目实现接口自动化的技术选型&#xff1a;PythonRequestsPytestYAMLAllure &#xff0c;主要是针对之前开发的一个接口项目来进行学习&#xff0c;通过 PythonRequests 来发送和处理HTTP协议的请求接口&#xff0c;使用 Pytest 作为测试执行器&#xff0c;使用 YAML 来管理测…

Git使用rebase和merge区别

Git使用rebase和merge区别 模拟环境使用merge合并使用rebase 模拟环境 本地dev分支中DevTest增加addRole() 远程dev被同事提交增加了createResource() 使用merge合并 使用idea中merge解决冲突后, 推送远程dev后,日志图显示 使用rebase idea中使用功能rebase 解决冲突…

遥感图像分割系统:融合空间金字塔池化(FocalModulation)改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 遥感图像分割是遥感技术领域中的一个重要研究方向&#xff0c;它的目标是将遥感图像中的不同地物或地物类别进行有效的分割和识别。随着遥感技术的不断发展和遥感…

Hystrix使用及原理概述

一、背景 1. 当前问题 一个系统&#xff0c;所有请求共用同一个APP容器&#xff08;Tomcat/jetty/等&#xff09;&#xff0c;共用一个用户线程池&#xff0c;依赖多个不同的远程服务。 当系统健康时&#xff0c;处理请求的延时较低&#xff0c;服务正常运行&#xff1b;当某…

大模型下开源文档解析工具总结及技术思考

1 基于文档解析工具的方法 pdf解析工具 导图一览&#xff1a; PyPDF2提取txt&#xff1a; import PyPDF2 def extract_text_from_pdf(pdf_path):with open(pdf_path, rb) as file:pdf_reader PyPDF2.PdfFileReader(file)num_pages pdf_reader.numPagestext ""f…