C++入门知识

在这里插入图片描述
Hello,今天我们分享一些关于C++入门的知识,看完至少让你为后面的类和对象有一定的基础,所以在讲类和对象的时候,我们需要来了解一些关于C++入门的知识。

  1. 什么是C++
    C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的
    程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机
    界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言
    应运而生。
    1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一
    种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而
    产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的
    程序设计,还可以进行面向对象的程序设计。

在这里插入图片描述

我们可以看到这张图的人就是我们的祖师爷本贾尼·斯特劳斯特卢普,祖师爷觉得C语言在某些方面还是存在缺陷,所以在C语言的基础上不断的往上面加内容,就有了现在的C++,看到祖师爷先拜两下,有助于我们后面的学习。

  1. C++的发展史
    1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。

语言的发展就像是练功打怪升级一样,也是逐步递进,由浅入深的过程。我们先来看下C++的历史版本。我们来看下面的这张图来看看C语言的发展。
在这里插入图片描述
C++还在不断的向后发展。但是:现在公司主流使用还是C++98和C++11,所有大家不用追求最新,重点将C++98和C++11掌握好,等工作后,随着对C++理解不断加深,有时间可以去琢磨下更新的特性。
版本更新没有JAVA快,但是我们C++出现的早,JAVA有些内容也是模仿的C++

  1. C++的重要性
    3.1 语言的使用广泛度
    下图数据来自TIOBE编程语言社区2021年12月最新的排行榜,在30多年的发展中,C/C++几乎一致稳居前5。

在这里插入图片描述
TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互
联网上有经验的程序员、 课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如 Google、
MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)进行计算。
注意:排名不能说明那个语言好,那个不好,每门编程语言都有适应自己的应用场景。

3.2 在工作领域

  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语言一样启动我们的第一个编程Hello C++吧

#include<iostream>using namespace std;
int main()
{cout << "Hello C++" << endl;return 0;
}

在这里插入图片描述
这里我们C++第一个程序就开始跑起来了,我们就来讲讲一些代码中的东西吧

首先就是我们的头文件变成来iostream,这里我觉得不用过多的讲解,接下来就是std是什么意思,它就是一个流,我们要从里面获取东西cout就相当于我们之前的printf,还有就是endl相当于换行的作用,我们其实如果第一句话不是写成using name std的话,我们需要写成下面的内容。

#include<iostream>int main()
{std::cout << "Hello C++" <<std:: endl;return 0;
}

::是C++的域操作符,相当于我们要从这里面取出东西就得加上这个东西
之前其实讲过stdin和stdout,不知道大家有没有记得是那篇文章。

  1. C++关键字(C++98)

C++总计63个关键字,C语言32个关键字

在这里插入图片描述
这些内容我们现在不需要记住,后面遇到一个我们就讲一个,接下来我们来讲讲命名空间

命名空间
我们想象这样的一个场景,就是两个人在做一个项目,但是命名的时候他们心意相同,命名同一个变量,后来他们合到一起的时候,编译错误,这个时候该怎么办呢,是他们打一架,然后输的那个人把变量名改掉吗。这个时候我们的祖师爷觉得这样就会很麻烦,于是就有了我们现在认识的命名空间。

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存
在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,
以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的.


#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{printf("%d\n", rand);return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

上面的代码我们运行起来就是会出现错误,但是我们如果不包含头文件的时候就不会报错,像这样


#include <stdio.h>int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{printf("%d\n", rand);return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

我们取消了头文件stdlib,所以就不会报错。。
我们也可以从这个函数引出其他的问题,我们来看下面的代码。

在这里插入图片描述
List .h

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

Queue.h

struct Node
{struct Node* node;int val;
};struct Queue
{struct Node* head;struct Node* tail;
};

test.cpp

#include"list.h"
#include"Queue.h"int main()
{struct Node node;return 0;
}

这里我们进行编译就会出现上面的问题,所以这是什么原因呢,原因很简单,首先就是我们包含两个头文件,这两个头文件里都有Node这个变量,那我们这个时候难道又让他们打一架吗,我们的祖师爷可不让我们这样做,所以就有命名空间,这样就可以不用打架了,我们来看一下该怎么用呢

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样我们的问题就轻松的解决了。

今天的入门知识就分享到这里,后面再继续分享了!!!!

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

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

相关文章

代码随想录算法训练营 动态规划part06

一、完全背包 卡哥的总结&#xff0c;还挺全代码随想录 (programmercarl.com) 二、零钱兑换 II 518. 零钱兑换 II - 力扣&#xff08;LeetCode&#xff09; 被选物品之间不需要满足特定关系&#xff0c;只需要选择物品&#xff0c;以达到「全局最优」或者「特定状态」即可。 …

eclipse如何引入lombok插件

1. 下载插件 Downloadhttps://projectlombok.org/downloadlombok插件是一个jar包&#xff0c;如下图&#xff1a; 2. 安装插件 双击运行下载的jar包&#xff0c;点击如下按钮&#xff1a; 在弹窗内选择eclipse的启动程序eclipse.exe&#xff0c;注意&#xff01;&#xff01;…

基于springboot+vue的车辆管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

4、SpringBoot_Mybatis、Druid、Juint整合

五、SSM整合 1.整合Mybatis 1.1springmvc 整合回顾 导入坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.17.RELEASE</version></dependency><dependency>…

XAPI项目架构:应对第三方签名认证的设计与调整

《XAPI项目》&#xff1a;GitHub仓库&#xff08;勿打&#x1f6ab;小破站一个&#xff09; 该项目是基于鱼皮的《API开发平台》项目的需求和架构设计上进行Golang版本开发的。 这篇文章&#xff0c;主要内容是记录在《XAPI项目》的原架构上&#xff0c;为了应对第三方签名认证…

js中的数据结构:栈,队列,链表,字典哈希表,树

栈&#xff1a;先进后出 队列&#xff1a;先进先出 链表&#xff1a; 单链表&#xff1a; 双链表&#xff1a; 环形链表&#xff1a;最后一个数据的next指针不是指向null&#xff0c;指向的是任意之间的一个数据&#xff0c;形成一个环 数组和链表的区别&#xff1a; 字典和哈…

Docker Desktop 界面功能介绍,添加国内镜像源

目录 镜像源修改设置 其他偏好设置 镜像源修改设置 默认情况下&#xff0c;Docker Desktop会从Docker Hub下载镜像&#xff0c;但在国内由于网络的原因&#xff0c;下载速度可能较慢&#xff0c;配置国内镜像源可以提速镜像下载。在Docker Desktop中配置镜像源非常简单&…

LLM各层参数详细分析(以LLaMA为例)

网上大多分析LLM参数的文章都比较粗粒度&#xff0c;对于LLM的精确部署不太友好&#xff0c;在这里记录一下分析LLM参数的过程。 首先看QKV。先上transformer原文 也就是说&#xff0c;当h&#xff08;heads&#xff09; 1时&#xff0c;在默认情况下&#xff0c; W i Q W_i^…

2023/09/20 day4 qt

做一个动态指针钟表 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> //绘制事件类 #include <QPaintEvent> //画家类 #include <QTime> #include <QTimer> #include <QTimerEvent> QT_BEGIN…

用于设计 CNN 的 7 种不同卷积

一 说明 最近对CNN架构的研究包括许多不同的卷积变体&#xff0c;这让我在阅读这些论文时感到困惑。我认为通过一些更流行的卷积变体的精确定义&#xff0c;效果和用例&#xff08;在计算机视觉和深度学习中&#xff09;是值得的。这些变体旨在保存参数计数、增强推理并利用目标…

rtsp转webrtc的其他几个项目

1&#xff09; mpromonet/webrtc-streamer &#xff08;c开发&#xff09; 把rtsp转webrtc&#xff0c; 通过 load urls from JSON config file ./webrtc-streamer -C config.json 通过exe文件和docker项目实际测试可以显示&#xff0c;但不太稳定加载慢,有时候出错后很难…

7.15 SpringBoot项目实战 【学生入驻】(上):从API接口定义 到 Mybatis查询 串讲

文章目录 前言一、service层 和 dal层方式一、Example方式方式二、Mybatis XML方式方式三、Mybatis 注解方式 二、web层 StudentController最后 前言 接下来我们实战【学生入驻】&#xff0c;对于C端学生端&#xff0c;一切交互开始于知道 当前学生是否入驻、是否有借阅资格&a…

LeetCode 753. 破解保险箱【欧拉回路,DFS】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

java字符串压缩和字符串解压

java字符串压缩和字符串解压 运行效果 java工具类 CompressUtil.java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import org.apache.commons.codec.binary.Base64;import java.io.BufferedReader; import java.io.Byte…

el-form自定义规则后表单验证validate不生效的问题

1.首先放出结论&#xff0c;自定义验证规则必须降所有的可能全部都return callback出去&#xff0c;不然不会走validate 错误示范 // template <el-formref"ruleFormRef":model"ruleForm":rules"rules"label-width"120px"class&qu…

力扣:105. 从前序与中序遍历序列构造二叉树(Python3)

题目&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&am…

Visio——绘制倾斜线段

一、形状 -> 图表和数学图形 -> 多行 二、放置多行线&#xff0c;可以发现存在两个折点 三、选择多行线&#xff0c;右键选择删除点&#xff0c;即可得到倾斜线段

C进阶-数据的存储

数据类型介绍 内置类型&#xff1a; //数据类型中的内置类型 // char //字符数据类型 // short //短整型 // int //整型 // long //长整型 // long long //更长的整型 // float //单精度浮点数 // double //双精度浮点数 //数据类型中的内置类型 单位是字节 // char //字…

PyCharm 手动下载插件

插件模块一直加载失败&#xff0c;报错信息&#xff1a; Marketplace plugins are not loaded. Check the internet connection and refresh. 尝试了以下方法&#xff0c;均告失败&#xff1a; pip 换源Manage Plugin Repositories...HTTP 代理设置...关闭三个防火墙 最后选…

《动手学深度学习 Pytorch版》 7.4 含并行连接的网络(GoogLeNet)

import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l7.4.1 Inception块 GoogLNet 中的基本卷积块叫做 Inception 块&#xff08;大概率得名于盗梦空间&#xff09;&#xff0c;由 4 条并行路径组成。 前 3 条路径使用窗口…