C++初阶-C++入门基础
目录
编辑
1.C++的简介
1.1C++的产生和发展
1.2C++的参考文档
1.3C++优势和难度
1.4C++学习的建议
2.C++的第一个程序
2.1打印Hello world
2.2头文件
2.3namespace命名空间
2.4::作用域限定符
2.5namespace的延伸
2.6C++的输入输出
3.总结
1.C++的简介
1.1C++的产生和发展
C++是在1997年发布的第一个成熟版本,C++是由Bjame Stroustrup(中文翻译为本贾尼·斯特劳斯特卢普)觉得C语言有太多限制而想出来改变的一个改进的语言,现在公司主要用的是C++98和C++11版本的,C++三年更新一次,下一次更新是在2026年。
1.2C++的参考文档
C++有些参考文档,链接有:https://legacy.cplusplus.com/reference和https://zh.cppreference.com/w/cpp和https://en.cppreference.com/w/这三个文件都有自己的优势和不足,需要结合着使用。
1.3C++优势和难度
C++在TIOBE的排行榜上排名第二,仅次于Python,但是Python是解释型语言,不会编译,所以Python有一系列的不足,虽然它可以很快写出题目,但它性能不会用它不利于之后找工作,Python只能作为辅助性的语言而不能去作为竞争手段。此外,C++转其他语言不是很难。而且C++以后找工作有很多方向,如:测试开发、嵌入式、游戏引擎、服务端开发基本上用C++,哪怕是现在最火的人工智能,它的底层大多都用C++写的,所以C++前景好,但是C++学习难度非常高,相对难学难精的语言,但是这是相对于其他一些语言难度较高。自学难度极大,主流的另外一个语言如:Java虽然开始难度比较低,但是后面难度还是比较高的,所以要学习C++也需要花很多的时间,但是C++确实在一些刷题软件如:牛客、力扣上的刷题次数较多的,所以之后找工作面试的时候用C++也写了很多题目了,也可以作为一个竞争手段吧!但是如果坚持去学习C++的话也会让结果变得很好的。加油吧!
1.4C++学习的建议
C++建议不用自学,C++自学是很痛苦的,如果没有很强力的辅导基本上也没有什么作用。此外全部看博客也是没有什么太大用处的,因为博客总有一些不会提及到的知识,所以自学是非常不建议的。建议去报名一些课程,如果想要报名方式也可以找我私信,我不会去打广告,但是也不会让你们去一些非常吃亏的课程去上,如线下课,因为线下课不能随时随地去听,而且老师管的也太少了,所以我的建议就是报名课程。我写的博客可以自己去总结然后自己去实现这个代码,最好之后再写一篇自己的理解的博客,光看是没有什么用处的,主要是自己理解才能有用。
2.C++的第一个程序
2.1打印Hello world
C++编译器兼容C语言的,所以我们不必要去再写一个文件。我们要明白一个点:C++是C语言的进阶,所以C++的学习需要打好C语言的基础。之后的C++我都会在C语言的方向下改变思路,因为C语言有太多不足了,所以C++就相对于C语言有很大的优势了。我们学习C语言的第一个程序就是打印Hello world然后我们再进行语法解析,所以C++我们也是这样的,对比一下C++和C语言吧!
#include<stdio.h>
int main()
{printf("Hello world\n");return 0;
}
#include<iostream>
using namespace std;
int main()
{cout << "Hello world" << endl;return 0;
}

两个代码的执行结果都为这个,接下来我将逐步解析这个C++代码。
2.2头文件
为什么我们不需要包含<stdio.h>了?
C++确实也可以包含这个头文件,但是<iostream>这个文件就包含了<stdio.h>这个文件的内容。
C++的头文件为什么不用加.h结尾了?
这个问题不重要,我们可以看一下我之前提供的链接里面的函数,里面都没有.h文件,所以我们不需要管这个问题,问题太多了也不是一件好事,语言规定了这个头文件是什么你就用就可以了。
2.3namespace命名空间
在C语言中有个很关键的问题,我们如果命名重复就会导致报错,如:
#include<stdlib.h>
int rand = 0;
int main()
{int a = rand();return 0;
}
我们会发现在C语言文件中int a=rand();那个语句会报错,因为我们在stdlib.h文件中有个函数是rand()函数来生成随机数,但是我们又定义了一个rand变量,这会让编译系统不知道到底是哪个rand,在C语言的解决办法就是把rand放到其他的如结构体或成为临时变量取改变它所在的域,这样才不会报错,但是在C++中就需要一个关键字为namespace,这个关键字创建的是另一个域,因为编译器语法规定要找到它的声明或定义,而且是先在局部域开始寻找这个变量或函数(这个函数),最后再到全局域去寻找这个变量或函数,而不会去其他域寻找,只有我们要求它查找才会去寻找这个域。而namespace可以用来创造一个域,里面可以包含变量,函数,结构体等等,其结构和结构体差不多,主要是结构体不能包含函数,且namespace最后的}不需要加;,所以示例如下:
namespace we
{//定义变量int rand = 10;//定义函数int Add(int x, int y){return x + y;}//定义结构体struct Node{struct Node* next;int val;};
}
如何用namespace创造出来的域里面的变量/函数/结构体呢?
2.4::作用域限定符
::域作用限定符指定访问一个域中的东西,如
int main()
{printf("%d", we::rand);return 0;
}
![]()
2.5namespace的延伸
(1)namespace只能定义在全局,当然也可以嵌套定义。
前面那个原因我就不说了,这是个规定,没有为什么。第二个我加个示例:
#include<iostream>
using namespace std;
namespace we
{//定义变量int rand = 10;//定义函数int Add(int x, int y){return x + y;}//定义结构体struct Node{struct Node* next;int val;};namespace you{int rand = 10;int jiang(int x, int y){return x - y;}}
}
int main()
{cout << we::rand << endl;cout << we::you::rand << endl;return 0;
}
我们在we这个里面又定义了一个you,其中在you里面我们又可以定义变量,函数等等,而且由于作用域不同,我们还可以再在里面定义一个rand,其中如果想要继续到you里面去查找的也可以再加上一个::去访问里面的元素。
(2)如果我们名称(we)在多文件中都有namespace定义了,会被认为是同一个namespace,不会冲突,因为二者都会合并,但是里面的元素不能同名哦,这和C语言差不多的,因为域也相同。
(3)C++标准库都放在一个叫std的命名空间中,所以我们之前打印用的cout,endl都是在std这个命名空间中,我们不需要包含其他的头文件,因为这个里面本来就有,但是我们如果不用using namespace std的话也要加std::,这样更麻烦,但是我们如果用来写很大的文件中就不要加这句话了,这是为什么呢?
using namespace std中的using把std命名空间全部展开,这样我们就不用一直std::了,当然我们也可以用using把std里面的函数cout展开如:using std cout这样之后打印的时候就不用在用cout这个函数的时候再std::了,而其他的就仍然需要std::,这个方法适用于一些使用较多的函数或变量或结构体,但是如果展开全部成员这就比较危险了,因为我们本来就想把二者放在不同的作用域,而全部展开就没有作用了,但是只要你不怕命名冲突就可以展开。
所以如果我们不去加using namespace std;的话我们可以这样打印Hello world:
std::cout << "Hello world" << std::endl;
2.6C++的输入输出
在C语言中我们了解到<<和>>分别是左移右移操作符,但是在C++中<<是输入,>>是输出。其中cout << i是自动识别类型的,所以我们可以让i 为字符串等等,而printf需要自己去输入类型很麻烦,而且之后我们可以自定义类型,用C语言就不能自定义类型,识别不出来。其中输出的函数是std::cin比如我们想在键盘中输入3赋值给i,把4赋值给d有:
int main()
{int i, d;cin >> i >> d;cout << i << endl << d << endl;
}

我们发现如果我们两个之间加空格输入的方式是可以的,那换行呢?

这样输入也是可以的,所以C++的灵活性也是可以的。
endl这个是什么?
endl是换行函数,我们如果把endl改为"\n"或者'\n'也是可以换行的,但是endl好写一些,如果我们两个<<之间不写任何东西是不可以的,但是我们可以输入一个空格的,如果觉得这样不方便也可以用printf的方式输出,每种方式都有各自的优势吧!
3.总结
C++开始涉及一个点就需要引申到另外一个点,所以思维连贯性较强,这一节不是很难,但是也需要去理解基本用法,下一节就有点难度上升了哦,下讲再见!喜欢的可以一键三连哦!

相关文章:
C++初阶-C++入门基础
目录 编辑 1.C的简介 1.1C的产生和发展 1.2C的参考文档 1.3C优势和难度 1.4C学习的建议 2.C的第一个程序 2.1打印Hello world 2.2头文件 2.3namespace命名空间 2.4::作用域限定符 2.5namespace的延伸 2.6C的输入输出 3.总结 1.C的简介 …...
关于量化交易在拉盘砸盘方面应用的部分思考
关于“砸盘”的深层解析与操盘逻辑 一、砸盘的本质与市场含义 砸盘指通过集中抛售大量筹码导致价格快速下跌的行为,其核心目标是制造恐慌、清洗浮筹或实现利益再分配。不同场景下的砸盘含义不同: 主动砸盘(操控…...
idea手动创建resources文件夹
有时maven没有构建成功可能造成,resources文件夹不创建的现象 此时我们可以手动创建 手动创建...
第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组题目试做(中)【本期题目:回文数组,挖矿】
OK,继续写我们的第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组题目,后面的题目比较麻烦了,所以我们再分两期讲。 这一期的题有 : 回文数组,挖矿 文章目录 回文数组基本思路第一步,获取半个数组每个数需要…...
Qt动画 QAbstractAnimation
文章目录 简介QVariantAnimation 数值动画QPropertyAnimation 属性动画 QAnimationGroup 一组动画QParallelAnimationGroup 并行动画组QSequentialAnimationGroup 串行动画组 简介 QAbstractAnimation 是所有 Qt 动画的基类。 该类定义了所有动画应该都会有的功能函数。 要想实…...
SpringMvc的请求-获得请求参数
客户端请求参数的格式是: namevalue&namevalue..… 服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数: 基本类型参数 POJO类型参数 数组类型参数 集合类型参数 获得基本类型参数 Controller中的业务方法…...
flutter开发音乐APP(前提准备)
1、项目的一些环境: 2、接口文档: 酷狗音乐 NodeJS 版 API 3、接口数据结构化 Instantly parse JSON in any language | quicktype UI样式借鉴参考: Coffee-Expert/Apple-Music-New-UI: Apple Music Clone on Flutter, with redesigned UI…...
使用docker搭建redis镜像时云服务器无法访问到国外的docker官网时如何解决
下载redis镜像 docker redis:版本号 此时截图中无法访问到国外的docker官网 解决方案: 通过更换镜像源来正常下载redis镜像 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1…...
双引擎驱动:解密音视频体验的QoS技术底座与QoE感官革命
QoS 定义:QoS(Quality of Service,服务质量)衡量音视频传输技术层面的性能表现,聚焦网络传输和系统处理能力,通过客观指标量化服务质量。核心指标 码率/带宽:数据传输速率上限,直接…...
Qt之QNetworkInterface
简介 用于表示网络接口(即网卡)信息 常用接口 static QList<QNetworkInterface> allInterfaces(); static QList<QHostAddress> allAddresses(); QList<QNetworkAddressEntry> addressEntries() const;接口类型 用枚举InterfaceTy…...
pom导包成功,但是就是无法使用相关类,同时报错:Library:Maven ‘xxx‘ has broken path
开发环境:Intellij 2023 一、问题记录 在maven工程的pom文件导入如下某一依赖(JGit)。没有显示导包的错误,同时在maven仓库里面找到对应的包是正常下载到相应jar的。 但是就是无法引入相关的类。打开Project Structure,在Dependencies中发现…...
大数据技术之Scala
Spark运行架构核心是一个计算引擎 核心组件 1. Driver(驱动器) 角色:Spark作业的“大脑”,负责解析用户代码、生成任务并调度执行。 功能: 将用户程序转换为作业(Job)。 …...
LeetCode刷题常见的Java排序
1. 字符串排序(字母排序) 首先,你的代码实现了根据字母表顺序对字符串中的字母进行排序,忽略了大小写并且保留了非字母字符的位置。关键点是: 提取和排序字母:通过 Character.isLetter() 判断是否为字母,并利用 Character.toLowerCase() 来忽略大小写进行排序。保留非字…...
mysql的下载和安装2025.4.8
mysql下载和安装 MySQL的下载网址: https://www.mysql.com/downloads/ 点击进入Windows版本下载:我们可以选择需要的MySQL版本以及所需的操作系统,这里选择离线安装: 注意:MySQL 8.0 是带有 MySQL Installer 的最后一…...
QML Loader:延迟加载与动态切换
目录 引言相关阅读工程结构LoaderDelay.qml - 延迟加载实现完整代码HeavyComponent.qml代码解析运行效果 LoaderSwitch.qml - 动态切换组件完整代码代码解析运行效果 Main.qml - 主界面实现完整代码主界面结构代码解析 总结下载链接 引言 QML的Loader组件提供了一种强大的机制…...
Python和MicroPython的解释器区别
Python和MicroPython的解释器不是同一个,它们在设计目标、实现方式和运行环境上都有显著的区别。以下是它们的主要区别: 1. 底层实现 Python解释器(CPython): Python的标准解释器是CPython(C语言实现的Pyt…...
Git 的进阶功能和技巧
1、分支的概念和使用 1.1、什么是分支? 分支(Branch)是在版本控制中非常重要的概念。几乎所有版本控制系统都支持某种形式的分支。在 Git 中,分支是 Git 强大功能之一,它允许我们从主开发线分离出来,在不…...
解析HiveQL的ALTER TABLE ADD/REPLACE COLUMNS语句
阅读以下ALTER TABLE的ADD/REPLACE COLUMNS语句的语法,用C#编写解析函数,一个一个字符解析,所有关键字不区分大小写,一个或多个空格、Tab和换行的组合都可以是关键词之间的分隔,表名和字段名可能包含空格和Tab,语句中可以用`包裹表名和字段名,解析以下HiveQL语句在所有可…...
Spark Core编程
一 Spark 运行架构 1 运行架构 定义 Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构 如图所示 2 核心组件 Spark 框架有两个核心组件: 1)Driver 2)Spark 驱动器节点(用于执行 Spark 任务中的 main 方法&…...
在Ubuntu内网环境中为Gogs配置HTTPS访问(通过Apache反向代理使用IP地址)
一、准备工作 确保已安装Gogs并运行在HTTP模式(默认端口3000) 确认服务器内网IP地址(如192.168.1.100) 二、安装Apache和必要模块 sudo apt update sudo apt install apache2 -y sudo a2enmod ssl proxy proxy_http rewrite headers 三、创建SSL证书 1. 创建证书存储目录…...
Kafka和RocketMQ相比有什么区别?那个更好用?
Kafka和RocketMQ相比有什么区别?那个更好用? Kafka 和 RocketMQ 都是广泛使用的消息队列系统,它们有很多相似之处,但也有一些关键的区别。具体选择哪个更好用,要根据你的应用场景和需求来决定。以下是它们之间的主要区别: 1. …...
无人机装调与测试
文章目录 前言一、无人机基本常识/预备知识(一)无人机飞行原理无人机硬件组成/各组件作用1.飞控2.GPS3.接收机4.电流计5.电调6.电机7.电池8.螺旋桨9.UBEC(稳压模块) (二)飞控硬件简介(三&#x…...
JavaScript Hook JSON.stringify和JSON.parse:逆向与修改实战指南
在JavaScript逆向工程中,Hook JSON.stringify和JSON.parse方法是一种重要的技术,可以用来捕获、修改或分析JSON数据的序列化和反序列化过程。本文将结合具体案例,详细讲解如何实现这些方法的Hook操作。 一、Hook JSON.stringify和JSON.parse…...
【图书管理系统】全栈开发图书管理系统获取图书列表接口(后端:计算图书页数、查询当前页展示的书籍)
图书列表 实现服务器代码(计算图书总数量查询当前页需要展示的书籍) 后端响应时,需要响应给前端的数据 records:第 pageNum 页要展示的图书有哪些(存储到List集合中)total:计算一共有多少本书(用于告诉前…...
正则表达式补充——python
简介 本章是对前面正则表达式的补充。 一、复杂的查找替换等任务 content 张三是脑卒中病 李四,是高血脂 苏齐,是肺结核病 六六,是血血血血import re p re.compile(r...病) for one in p.findall(content):print(one) 运行结果…...
Kotlin日常使用函数记录
文章目录 前言字符串集合1.两个集合的差集2.集合转数组2.1.集合转基本数据类型数组2.2.集合转对象数组 Map1.合并Map1.1.使用 操作符1.2.使用 操作符1.3.使用 putAll 方法1.4.使用 merge 函数 前言 记录一些kotlin开发中,日常使用的函数和方式之类的,…...
Android 回答视频边播放边下载的问题
分层次的回答突出 技术深度、架构思维 和 实战优化,从基础实现到高阶优化: 一、核心技术方案(基础回答) 如何实现视频边下边播? 1. **网络请求**:使用 HTTP Range 请求(Header: Range: bytes0…...
RHCSA Linux系统 数据流和重定向 tee 命令
一.数据流和重定向 1. 数据流 (1) 标准输入(stdin,代码 0):默认从键盘获取输入,只读。 (2) 标准输出(stdout,代码 1):命令执行正确信息默认输出到屏幕,只写…...
[ctfshow web入门] web7
信息收集 题目提示:版本控制很重要,但不要部署到生产环境更重要。 那么很有可能,版本控制相关的信息被部署到环境了,比如比如version.txt记录了一些相关配件的版本,git版本管理工具中的.git文件夹未删除 信息收集就是…...
DeepSeek-V3 API:开启下一代AI应用开发的新篇章
引言 在人工智能技术日新月异的今天,大型语言模型(LLM)正以前所未有的速度改变着我们与技术互动的方式。DeepSeek-V3作为国内领先的大语言模型之一,其API的开放为开发者提供了强大的AI能力集成方案。 DeepSeek-V3 API的核心优势 1.强大的语言理解与生…...

