初识C++入门(1)

news2024/11/25 2:46:59

为什么会衍生出C++?

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了00P(object oriented programming: 面向对象)思想,支持面向对象的程序设计语言应运而生。


1982年,Biarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了-种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此: C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计(这也是C++兼容C语言的原因),又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

C++祖师爷的介绍

本贾尼·斯特劳斯特卢普(Bjarne Stroustrup,1950年6月11日-),丹麦人,计算机科学家,在德克萨斯A&M大学担任计算机科学的主席教授。他最著名的贡献就是开发了C++程序设计语言。

1982年,美国AT&T公司贝尔实验室的本贾尼博士在C语言的基础上引入并扩充了面向对象的概念,发明了—种新的程序语言。为了表达该语言与C语言的渊源关系,它被命名为C++。而本贾尼博士被尊称为C++语言之父。

1979 年,贝尔实验室的本贾尼等人试图分析 unix 内核的时候,试图将内核模块化,于是 C
语言的基础上进行扩展,增加了类的机制 ,完成了一个可以运行的预处理程序,称之为 C with
classes 。C++也是在不断更新的(完善和添加新语法等等)
C++还在不断发展, 但现在公司主流使用的还是C++98和C++11,目前重点掌握这两个即可,其他的版本语法可以等待工作以后随着对C++理解不断加深,再去了解其他版本语法特性。
C++的重要性
下图数据来自TIOBE编程语言社区202112月最新的排行榜,  在30多年的发展中,C/C++几乎一
致稳居前5。  
在工作领域中C++的作用
1. 操作系统以及大型系统软件开发
所有操作系统几乎都是 C/C++ 写的,许多大型软件背后几乎都是 C++ 写的,比如:
Photoshop Office JVM(Java 虚拟机 )等,究其原因还是性能高,可以直接操控硬件。
2. 服务器端开发 后台开发:主要侧重于业务逻辑的处理,即对于前端请求后端给出对应的响应,现在主流采 用java ,但内卷化比较严重,大厂可能会有 C++ 后台开发,主要做一些基础组件,中间件、 缓存、分布式存储等。服务器端开发比后台开发跟广泛,包含后台开发,一般对实时性要求
比较高的,比如游戏服务器、流媒体服务器、网络通讯等都采用 C++ 开发的。
3. 游戏开发
PC 平台几乎所有的游戏都是 C++ 写的,比如:魔兽世界、传奇、 CS 、跑跑卡丁车等,市面上
相当多的游戏引擎都是基于 C++ 开发的,比如: Cocos2d 、虚幻 4 DirectX 等。三维游戏领
域计算量非常庞大,底层的数学全都是矩阵变换,想要画面精美、内容丰富、游戏实时性
搞,这些高难度需求无疑只能选 C++ 语言。比较知名厂商:腾讯、网易、完美世界、巨人网
络等。
4. 嵌入式和物联网领域
嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些
装置。比如:智能手环、摄像头、扫地机器人、智能音响等。
谈到嵌入式开发,大家最能想到的就是单片机开发 ( 即在 8 位、 16 位或者 32 位单片机产品或者
裸机上进行的开发 ) ,嵌入式开发除了单片机开发以外,还包含在 soc 片上、系统层面、驱动
层面以及应用、中间件层面的开发。
常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、 Linux 开发工程
师、固件开发工程师等。
知名的一些厂商,比如:以华为、 vivo oppo 、小米为代表的手机厂;以紫光展锐、乐鑫为
代表的芯片厂;以大疆、海康威视、大华、 CVTE 等具有自己终端业务厂商;以及海尔、海
信、格力等传统家电行业。
随着 5G 的普及,物联网 ( 即万物互联, ) 也成为了一种新兴势力,比如:阿里 lot 、腾讯 lot 、京
东、百度、美团等都有硬件相关的事业部。
5. 数字图像处理
数字图像处理中涉及到大量数学矩阵方面的运算,对 CPU 算力要求比较高,主要的图像处理
算法库和开源库等都是 C/C++ 写的,比如: OpenCV OpenGL 等,大名鼎鼎的 Photoshop
就是 C++ 写的。
6. 人工智能
一提到人工智能,大家首先想到的就是 python ,认为学习人工智能就要学习 python ,这个
是误区, python 中库比较丰富,使用 python 可以快速搭建神经网络、填入参数导入数据就
可以开始训练模型了。但人工智能背后深度学习算法等核心还是用 C++ 写的。
7. 分布式应用
近年来移动互联网的兴起,各应用数据量业务量不断攀升;后端架构要不断提高性能和并发
能力才能应对大信息时代的来临。在分布式领域,好些分布式框架、文件系统、中间组件等
都是 C++ 开发的。对分布式计算影响极大的 Hadoop 生态的几个重量级组件: HDFS
zookeeper HBase 等,也都是基于 Google C++ 实现的 GFS Chubby BigTable 。包括分
布式计算框架 MapReduce 也是 Google 先用 C++ 实现了一套,之后才有开源的 java 版本。
除了上述领域外,在:科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景,
作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。
C++的介绍就到这里吧!你还记得学习C语言第一节课在电脑屏幕上输出hello world的喜悦感吗?
接下来我们以C++的形式输出hello world!
#include<iostream>
using namespace std;

int main()
{
	cout << "hello world" << endl;

	return 0;
}

我们先不用看懂全部代码 比如using namespace std;cout <<endl是什么意思?

咱们不急,先听我娓娓道来,我会在下面解释到的,解开困惑的

第一个知识 命名空间 namespace

当我们用C语言运行这段代码会出现报错

#include<stdio.h>
#include<stdlib.h>
int rand = 10;

int main()
{

	printf("%d ", rand);
	return 0;
}

为什么呢?因为在头文件<stdlib.h>库里面就包含了rand函数,我们再次使用rand定义了全局变量,因此会出现命名冲突,但C语言无法解决这种命名冲突问题,所以C++祖师爷为了解决命名冲突问题提出了namespace来解决。

命名空间一般用namespace+自己定义名字

比如我使用的是namespace as (as就是命名空间的名字)

用%p访问rand是因为rand是头文件里面的rand函数 编译器会推荐用%p访问

#include<stdio.h>
#include<stdlib.h>

namespace as
{
	int rand = 10;
}
int main()
{

	printf("%p", rand);
	return 0;
}

那怎么访问命名空间里面的rand的值呢?

使用 : :域作用限定符来访问

#include<stdio.h>
#include<stdlib.h>

namespace as
{
	int rand = 10;
}
int main()
{

	printf("%p", rand);
	printf("%d", as::rand);
	return 0;
}

命名空间相当于用围墙把rand"保护了起来"且留了一个入口,入口上面有牌匾"里面有恶犬 生人勿近 会咬人",只能有熟人进去喂"它(rand)"食物和与它互动。

#include<stdio.h>
#include<stdlib.h>

namespace as
{
	int rand = 10;

	struct Node
	{
		struct Node* next;
		int val;
	};

	int Add(int left, int right)
	{
		return left + right;
	}
}
int main()
{

	printf("%p\n", rand);
	printf("%d\n", as::rand);
	printf("%d\n", as::Add(2, 3));
	struct as::Node node;
	return 0;
}

假设同一个命名空间有相同的变量会怎么样呢?会不会自己和自己打一架?

实际上命名空间是可以嵌套的

#include<stdio.h>
#include<stdlib.h>

namespace as
{
	int rand = 10;
	namespace as1
	{
		int rand = 30;
	}
	namespace as2
	{
		int rand = 20;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};

	int Add(int left, int right)
	{
		return left + right;
	}
}
int main()
{

	printf("%p\n", rand);
	printf("%d\n", as::rand);
	printf("%d\n", as::as1::rand);
	printf("%d\n", as::as2::rand);

	printf("%d\n", as::Add(2, 3));

	struct as::Node node;

	return 0;
}

比如你在公司需要写项目比如栈,为了防止与同事写的冲突就可以运用命名空间

Stack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>

namespace fk
{
	typedef struct Stack
	{
		int* a;
		int sz;
		int capacity;
	}ST;
	void STInit(ST* ps);
	void STPush(ST* ps,int x);
}


test.cpp
#include"Stack.h"

namespace fk
{
	void STInit(ST* ps)
	{
		ps->a = NULL;
		ps->capacity = ps->sz = 0;
	}
	void STPush(ST* ps, int x)
	{
		//....
	}
}


int main()
{
	fk::ST st;
	fk::STInit(&st);
	fk::STPush(&st, 1);
	fk::STPush(&st, 2);
	fk::STPush(&st, 3);
}

那么它们运行起来不会冲突吗?

  同一个工程中允许存在多个相同名称的命名空间 , 编译器最后会合成同一个命名空间中。
一个工程中的 test.h 和上面 test.cpp 中两个fk 会被合并成一个。
当我们每次访问栈的时候都要使用命名空间名称+域作用限定符是不是有点太麻烦了?
有没有什么方法能直接访问呢?
这个时候就有了 usingnamesapce+命名空间名称 上面我们用C++输出hello world时候运用到了这个


test.cpp
#include"Stack.h"

namespace fk
{
	void STInit(ST* ps)
	{
		ps->a = NULL;
		ps->capacity = ps->sz = 0;
	}
	void STPush(ST* ps, int x)
	{
		//....
	}
}

using namespace fk;
int main()
{
	ST st;
	STInit(&st);
	STPush(&st, 1);
	STPush(&st, 2);
	STPush(&st, 3);
}

只需要在test.cpp写上一句 using namespace fk;即可

那么using namespace std;是什么意思呢?

std是C++官网标准库的命名空间,当我们展开std时,库里面的函数就可以使用了

那么std库里面的函数能随意展开吗?答案是否定的

在我们平常练习C++时可以展开自己定义的命名空间和std库的命名空间,但在实际工程上是不能随意展开的,容易出现冲突。

#include<iostream>是C++的头文件 类似于C语言的#include<stdio.h>

i=In O=Out 输入与输出 <<是流插入

C++为了有自己的换行符有了endl  endl=end line.

#include<iostream>

int main()
{
	//<< 是流插入
	int a = 10;
	std::cout << a << "\n";

	int b = 20;
	double e = 13.14;
	// << 可以自动识别数据类型
	int c = 545;
	std::cout << b<< "\n";
	std::cout << e << "\n";

	std::cout << c << std::endl;

	return 0;
}

 

在我们不展开C++的库函数时,只能用域作用限定符来cout和endl,例如std::cout std::endl

但每次指定命名空间不方便,又害怕C++库里面函数全部暴露 又有风险冲突?

那么怎么办呢?我们可以指定展开命名空间 例如下图

#include<iostream>
using std::cout;
using std::endl;
int main()
{
	//<< 是流插入
	int a = 10;
	cout << a << "\n";

	int b = 20;
	double e = 13.14;
	// << 可以自动识别数据类型
	int c = 545;
	cout << b<< "\n";
	cout << e << "\n";

	cout << c << endl;

	return 0;
}

 

 

cout中的C=console(控制台) cin是流提取 相当于C语言的scanf

#include<iostream>
using std::cout;
using std::endl;
int main()
{
	int a = 20;
	int b = 30;

	cout << a << endl << b << endl;

	std::cin >> a >> b;

	return 0;
}

 

如果要控制数字精度怎么办呢?使用C,因为C++兼容C

#include<iostream>
using std::cout;
using std::endl;
int main()
{
	int a = 20;
	int b = 30;
	double c = 13.1424;
	cout << a << endl << b << endl;
	//控制精度用C 因为C++兼容C
	printf("%.1lf\n", c);

	return 0;
}

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

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

相关文章

安科瑞预付费系统在某大型连锁农贸市场的设计应用

安科瑞 崔丽洁 摘要 本远程预付费管理系统采用智能远程预付费电表&#xff08;DTSY1352-NK/DDSY1352-NK系列&#xff09;&#xff0c;NB智能远传水表&#xff0c;采集各商户实时用电量、用电量总数&#xff0c;通过平台定时结算&#xff0c;结算账户余额&#xff0c;从而进行智…

资深IC工程师的快速学习指南《Verilog语言知识学习快速基础学习》

Verilog语言是一种硬件描述语言&#xff08;HDL&#xff09;&#xff0c;广泛用于数字集成电路&#xff08;IC&#xff09;设计和硬件描述。对于IC行业的初学者来说&#xff0c;掌握Verilog语言是非常重要的&#xff0c;因为它是设计和仿真IC电路的基础。之前也分享过很多Veril…

调用Open3d接口报错:E0282 全局范围没有 “localeconv“及E0070 不允许使用不完整的类型

Open3D已经编译好&#xff0c;在新建一个C工程测试接口的时候出现了以下报错 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0070 不允许使用不完整的类型 EnvTest F:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\incl…

如何使PoE交换机连接稳定?

随着PoweroverEthernet&#xff08;PoE&#xff09;技术的不断发展&#xff0c;PoE交换机已经处于非常成熟的阶段。然而&#xff0c;由于目前监控市场受到成本压力的影响&#xff0c;一些采用PoE供电的项目可能会选用品质较低的PoE交换机或线材&#xff0c;或者设计方案本身不合…

MQTT整合

MQTT整合 MQTT服务器软件筛选MQTT服务器软件mosquitto下载修改mosquitto配置,并启动mosquitto服务利用mosquitto工具测试订阅与发布可视化MQTT客户端工具MQTTX使用SpringBoot整合MQTT1.2.3.4.5.6.MQTT服务器软件筛选 MQ遥测传输(MQTT)是轻量级基于代理的发布/订阅的消息传输…

如何正确维护实验室超声波清洗器?

实验室一直被视为一个严谨而严肃的场所&#xff0c;实验应遵循一定的步骤&#xff0c;使用的设备也经历了详细的选择&#xff0c;如实验室超声波清洗机&#xff0c;其特点远强于一般类型的清洗机。专门负责采购的实验室人员一般对优质服务的实验室超声波清洗机印象深刻&#xf…

电力物联网关智能通讯管理机-安科瑞黄安南

众所周知&#xff0c;网关应用于各种行业的终端设备的数据采集与数据分析&#xff0c;然后去实现设备的监测、控制、计算&#xff0c;为系统与设备之间建立通讯联系&#xff0c;达到双向的数据通讯。 网关可以实时监测并及时发现异常数据&#xff0c;同时自身根据用户规则进行…

安科瑞ASCB1智能漏电断路器监测漏电和漏电保护

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 ASCB1系列一体式智慧空开&#xff0c;空开自带4G、WIFI、以太网等多种通讯方式&#xff0c;可选本地显示&#xff0c;集成保护、控制、计量等多种功能。广泛用于老旧社区改造、九小场所、学校宿舍、公寓、铁塔基站、路灯、充电桩等。

文献阅读快速法-ChatPDF

如题&#xff0c;直接提供给大家一款能够快速阅读文档的好工具——iTextMaster。 iTextMaster是一款免费的pdf阅读浏览器&#xff0c;上传pdf文档后等待几秒钟&#xff0c;AI就会自动反馈给用户关于文档的摘要总结。十分的方便且实用。 ChatPDF为您提供简洁的文档摘要。对于那…

数据库管理-第110期 Oracle Exadata 01(20231016)

数据库管理-第110期 Oracle Exadata 01&#xff08;202301016&#xff09; 今天开始一个新的系列&#xff0c;讲讲Oracle Exadata&#xff0c;将用若干期并关联之前和一体机相关的一些内容对Exadata进行讲解。本期是Oracle硬件的介绍。 1. Oracle Hardware and Engineered Sy…

STM32 看门狗(WDG)

STM32 看门狗&#xff08;WDG&#xff09; WDG简介 WDG&#xff08;Watchdog&#xff09;看门狗 在程序卡死的情况下&#xff0c;自动帮我们复位 简单来说就是程序运行的一个保障措施&#xff0c;我们得在程序中定期地进行喂狗&#xff0c;如果程序出问题卡死了&#xff0c;没…

存在已打开的MicrosoftEdge浏览器,无法执行安装

存在问题&#xff1a;UiBot Creator 安装Chrome扩展时&#xff0c;存在已打开的MicrosoftEdge浏览器&#xff0c;无法执行安装。 解决办法&#xff1a; 打开MicrosoftEdge浏览器&#xff0c;然后在浏览器页面右上角打开“…”图标 第二步&#xff0c;打开“…”图标之后&…

多关键词高亮显示

引入关键词文件&#xff0c;符合有条件的背景色高亮显示&#xff0c;也可取消。 <div id"testHtml"><p>写入的文本</p><p>关键词</p></div> var str 多个关键词&#xff0c;关键词文件&#xff0c;关键词 var strL str.replac…

批量修改视频尺寸:简单易用的视频剪辑软件教程

如果你需要批量修改视频尺寸&#xff0c;同时保持高质量的画质&#xff0c;那么“固乔剪辑助手”这款软件是你的不二之选。下面就是如何使用这款软件进行批量修改视频尺寸的详细步骤。 1. 首先&#xff0c;你需要在浏览器中进入“固乔科技”的官网&#xff0c;然后下载并安装“…

美客多、亚马逊卖家如何运用自养账号进行有效测评?

到了10月&#xff0c;卖家朋友们都在忙着准备Q4旺季吧&#xff01; 首先&#xff0c;祝愿所有看到这条推文的卖家朋友&#xff0c;今年旺季都能爆单&#xff0c;赚得盆满钵满&#xff01; 测评是珑哥常谈&#xff0c;一直备受关注&#xff0c;不论是新老卖家都是一个逃不开的…

用低代码打造CRM系统 实现客户个性化管理

CRM管理思想伴随着互联网和电子商务的大潮进入中国&#xff0c;对企业经营管理理念产生了巨大的冲击&#xff0c;使中国企业逐步树立起与世界接轨的客户关系管理理念。中国CRM市场的萌芽阶段大约始于2000年&#xff0c;而到2010年前后&#xff0c;中国市场上争相涌现了一大批CR…

什么是美体SDK?美摄美颜美体SDK对接开发指南

在当今的数字世界中&#xff0c;人们对自我表达和形象展示的需求越来越高。美体SDK应运而生&#xff0c;为用户提供了一种全新的美颜美体体验&#xff0c;让每一个人都能享受到个性化的美丽与自信。 一、美体SDK的特点 轻量级&#xff1a;美体SDK体积小巧&#xff0c;不会对用…

掌握音乐创作的终极利器:Avid Sibelius Ultimate for Mac /Windows

如果您是一位热爱音乐创作的人&#xff0c;无论是作曲家、编曲家、指挥家还是学生&#xff0c;那么您一定需要一款功能强大、专业可靠的乐谱制作软件。现在&#xff0c;让我向您介绍Avid Sibelius Ultimate&#xff0c;这是音乐界顶级的乐谱制作软件&#xff0c;它将成为您创作…

docker部署多个node-red操作过程

docker部署多个node-red操作过程 一、docker安装教程二、docker安装node-red2.1 拉取镜像2.2 创建目录并分配权限 三、 docker操作node-red3.1 部署node-red3.2 查看\关闭\删除容器 四、Docker删除Redis镜像 回到目录 一、docker安装教程 【docker使用安装教程】 回到目录 …

(SCADA)监控与数据采集系统

SCADA应用于监控和采集数据来控制工业过程软件。它通过收集和传输实时数据&#xff0c;帮助操作员监视和控制各种设备和过程。这篇文章将介绍SCADA系统的工作原理、应用行业和场景&#xff0c;以及所需的模块和硬件设备。最后&#xff0c;还会详细介绍几款国外SCADA软件给大家参…