c++初阶学习----入门(上)

news2024/9/22 9:38:26

        大家好啊。最近学习了一点关于c++的知识。这不就迫不及待的来与大家分享了嘛。但我这也是现学现卖所以咧。有很多遗落甚至不对的地方希望大家可以在评论区里面指出来。这样也可以增加大家对知识的巩固。

c语言与c++的联系

        不知道大家看到c++会不会不由自主的联想到C语言啊。毕竟都是编程语言而且都带有一个c那么联想到应该很正常吧。反正开始的时候我身边的人是这样的。每当有人说着c++。哦,那个人不是学c语言的嘛。应该会吧。但是我开始对c++一点都不知道啊。但是经过今天的学习。我知道了。c++与c语言确实有很大的联系。

       更加准确的说C++是在C语言的基础上发展而来的,它是完全兼容C语言的。大家还记得我们以前在vs里面创建项目的时候后缀打的是.c。当然写c++的代码vs还是适用的。只是后面我们创建c++项目的时候用的是.cpp了。

      还有就是我们也可以在.cpp里面写c语言的代码。但是不能再.c里面写c++的代码。因为c++是在c语言的基础上延伸发展的。也可以说c++是以c语言为基础而衍生出来的更加先进的编程语言。 好了大家只是需要知道c++是以c语言为基础发展的并且c++包含c语言就可以了。

第一个代码

        不知道大家是否还记得刚开始玩c语言的时候写的第一个代码是什么了。但是我觉得我当时写的第一个代码是关于printf的。然后对于c++的话我们这里也是实现关于printf的。大家可以看一下:

       大家发现了吧。这个代码实现的效果与c语言中的printf是一样的。并且除了前期准备啊。代码量还像也差不多的。但是其中还有一些什么东西不理解啊。比如说什么std啊cout啊还有什么endl啊。大家别急。接下来我们就一一来讲解。

命名空间

       对于c++的第一个正式知识点我们来讲讲命名空间namespace那命名空间的含义是啥咧。这个我们先来看看比较官方的解释是个啥:在C/C++中,变量,函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

       也就是说命名空间就是为了解决我们c语言中的名字重复。避免冲突。那么光讲的话也不能让大家理解,那么我们直接举个例子:

        大家看一下上面的两个区别。一个报错一个成功打印了。大家还记得rand的作用吧。rand是生成一个随机数的。反正这也就表明嘛。这是库函数,在c语言中如果出现这样的话就不能实现效果,但是在c++里面我们只需要命名一下空间那么就变的合理了。这下子大家知道namespace的作用了吧。

        并且大家也看到了namespace的用法就是namespace+名字。然后{}。在括号里面可以写可以定义变量/函数/类型等。就是说出来上面这个以外还可以定义一个变量以外还可以定义结构体,函数这些。

         只要定义好了之后就可以正常使用了。 并且还可以嵌套命名空间就是一个命名空间里面还可以写其他的命名空间。

        大家应该发现了吧。我在使用命名空间的时候再打印的时候是写的yh::rand。这就是使用命名空间的最基本的指定命名空间访问,大家可以理解为yh->rand。这是我们后面使用最常见且为最稳妥的一个用法了。还有一个用法就是using将命名空间中某个成员展开。什么意思咧。以上面这张图片来说就是将命名空间中的其中一些指定的成员,比如说经常使用的,免得每次都要指定。那么具体是什么样子的咧:

       这里我们只放开了yh空间中的a。所以我们在使用的时候,只有a可以不在特定的引用了。其他的还是需要特定引用。 那既然有指定开,或者或是半开,那么有没有全开咧。嘿,可还真有。展开命名空间中全部成员 。含义显而易见吧,就是把整个 命名空间全部展开。这样就不需要大家特定指引了。但是这虽然看起来要号一些。但是项⽬不推荐,冲突⻛险很⼤。因为你本来就是为了防止命名冲突的,你这又全部展开了。岂不是没干了。但我们写代码较少的话也可以用,毕竟少嘛。风险也较小。但后面上班了。写项目了还是尽量或者别用:

      大家也看到这里就了解了命名空间如何创建以及命名空间的三种用法了吧。

输入与输出

       当我们学习了namespace后,我们就来聊聊代码中的第二个新知识点cout。大家可以稍微看一下下面的解释。

<iostream> 是 Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输
出对象。相等于输入与输出的头文件。
std::cin 是 istream 类的对象,它主要⾯向窄字符(narrow characters (of type char))的标准输
⼊流。
std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。相当于我们的控制面板
std::endl 是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符加刷新缓冲区。相当于我们的换行“\n”
<<是流插⼊运算符,>>是流提取运算符。(C语⾔还⽤这两个运算符做位运算左移/右移)
       而且 cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要 通过命名空间的使⽤⽅式去⽤他们。

       我们前面说过c++是c语言的发展。那么接下里我们要讲一个爽点。我们都还记得我们c语言输入与输出变量的话都需要确定我们输入与输出的类型。但是大家看我的那个代码,输出的时候我并没用写类型啊。是不是,这就是c++与c语言相比的一个爽点。

还有就是大家可以在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码可以提⾼C++IO效率 。ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);反正就是没写对我们现在是无差的。但是写了还是有意的。我们只管写进可以了。

缺省参数

        什么叫缺省参数啊。没怎么听过啊。那么缺省参数就是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参 则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(有些地⽅把缺省参数也叫默认参数)

       并且在c++中缺省参数分为半缺与全缺。名字显而易见,全缺就是没有指定实参。半缺就是有一部分确定了实参。

       C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。

       就是说缺省参数定义的话只能从右向左缺。就是右边开始没有。调用的话就是翻过来的。然后声明必须确定缺省值。那么上面是什么意思咧。我们来讲讲。

        我们可以看看我们上面写的这个代码。第一个Func我们就没传参数啊。我在引用的时候写了a与b的值。这就是我们在没有传参的时候使用默认的参数。并且这个还是一个全缺省参数。怎么看的咧。什么看我们在引用的时候是不是直接都赋了值的。也就是说就算我们在调用的时候没有传参,c++还是加油用默认参数给出一个答案。

         接下来就是半缺,我们讲过,我们在写的时候从右向左。调用的时候从左向右。我们如果是半缺的话就不能像全缺那样,一个都不写。比如说:

        我们可以看到半缺的时候我们如果一个没写,系统是会提醒的。这就表明我们半缺你要保证我们使用的式子每一个都有参数。那个缺了就补那个。并且不能跳跃。这也是系统不允许的。我们至少要保证完成这个样子。 

        对于缺省参数我们还有一个知识点就是缺省参数不能声明和定义同时给。什么意思咧。大家看一下下面的这个照片就知道了 。

总结

      好的,上面就是c++的初阶学习的上篇了,然后我们接下来还会有一个下篇。这里我们主要先交代一些让大家消化一下,毕竟刚从c语言转到c++的话,可能还会有一点不理解,所以先给大家一点时间看一下,消化一下。这里只是开胃菜,然后大家还是需要把这些记住,因为后面对于c加加的学习和使用的话会用的比较多。 

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

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

相关文章

TVBox的Json配置接口编写指南,模板格式说明(如何打造一个专属于自己的TVBox配置文件)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 配置解析 📒📝 JSON基础📝 配置文件结构/参数说明📝 编写步骤📝 注意事项🎈 接口分享⚓️ 相关链接 ⚓️📖 介绍 📖 TVBox 是一款备受欢迎的电视盒子应用(免费影视必备),它以其高度自定义的特性深受用户喜爱…

Pearson 相关系数的可视化辅助判断和怎么用

Pearson 相关系数的可视化辅助判断和怎么用 flyfish Pearson 相关系数 是一种用于衡量两个连续型变量之间线性相关程度的统计量。其定义为两个变量协方差与标准差的乘积的比值。公式如下&#xff1a; r ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i −…

jitsi 使用JWT验证用户身份

前言 Jitsi Meet是一个很棒的会议系统,但是默认他运行所有人创建会议,这样在某种程度上,我们会觉得他不安全,下面我们就来介绍下使用JWT来验证用户身份 方案 卸载旧的lua依赖性sudo apt-get purge lua5.1 liblua5.1-0 liblua5.1-dev luarocks添加ubuntu的依赖源,有则不需…

AI时代算法面试:揭秘高频算法问题与解答策略

三种决策树算法的特点和区别 ID3算法&#xff1a;基本的决策树算法&#xff0c;适用于简单的分类问题C4.5算法&#xff1a;改进了ID3算法&#xff0c;适用于更复杂的分类问题&#xff0c;可以处理连续型数据和缺失值CART算法&#xff1a;更加通用的决策树算法&#xff0c;适用于…

住宅代理、移动代理和数据中心代理之间的区别

如果您是一名认真的互联网用户&#xff0c;可能需要反复访问某个网站或服务器&#xff0c;可能是为了数据抓取、价格比较、SEO 监控等用例&#xff0c;而不会被 IP 列入黑名单或被 CAPTCHA 阻止。 代理的工作原理是将所有传出数据发送到代理服务器&#xff0c;然后代理服务器将…

用LangGraph、 Ollama,构建个人的 AI Agent

如果你还记得今年的 Google I/O大会&#xff0c;你肯定注意到了他们今年发布的 Astra&#xff0c;一个人工智能体&#xff08;AI Agent&#xff09;。事实上&#xff0c;目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体&#xff08;AI …

VBA实现Excel的数据透视表

前言 本节会介绍通过VBA的PivotCaches.Create方法实现Excel创建新的数据透视表、修改原有的数据透视表的数据源以及刷新数据透视表内容。 本节测试内容以下表信息为例 1、创建数据透视表 语法&#xff1a;PivotCaches.Create(SourceType, [SourceData], [Version]) 说明&am…

面对数据不一致性的解决方案:

polarDB是读写分离和计算存储分离的分布式数据库&#xff0c;并且副本的log replicate是基于Parallel-Raft协议来实现的。所以在瞬时进行写和读的操作时&#xff0c;是不可避免会存在数据一致性问题&#xff0c;导致这个数据一致性问题的原因不是事务&#xff0c;而是多副本日志…

【考研数学】李林《880题》25版听说大改版?和和24版差别大吗?

25版和24版总体差别不大&#xff0c;只有小部分内容有所变动&#xff01; 拓展题部分的更新&#xff1a;25版在拓展题部分进行了一些更新&#xff0c;从李林的模拟题中挑选了大约40道题目添加到新版中。 高等数学&#xff1a;变动主要集中在前三章&#xff0c;但具体的题目变…

【C++】开源:坐标转换和大地测量GeographicLib库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍坐标转换和大地测量GeographicLib库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关…

Facebook社交平台的未来发展趋势分析

随着科技和社交需求的不断演变&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;其未来发展的趋势备受关注。从技术创新到社会影响&#xff0c;Facebook正在经历着前所未有的变化和挑战。本文将探讨Facebook未来发展的几个关键趋势&#xff0c;并分析其可能的影响和…

SpringBoot 实现视频分段播放(通过进度条来加载视频)

需求&#xff1a;现在我本地电脑中有一个文件夹&#xff0c;文件夹中都是视频&#xff0c;需要实现视频播放的功能。 问题&#xff1a;如果通过类似 SpringBoot static 文件夹的方式来实现&#xff0c;客户端要下载好完整的视频之后才可以播放&#xff0c;并且服务端也会占用大…

Androidstudio开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源&#xff1a;和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

用Vue3和Plotly.js绘制交互式3D散点图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 Plotly.js 创建 2D 密度图 应用场景介绍 密度图是一种可视化数据分布的图表&#xff0c;它显示了数据点的密度在不同区域的变化情况。在许多科学和工程领域中&#xff0c;密度图被广泛用于探索和分析数据…

java项目总结数据库

1.什么是数据库 用于存储和管理数据的仓库 2.数据库的特点 1.持久化存储数据。确实数据库就是一个文件系统。 2.便于存储和管理数据 3.使用统一的方式操作数据库 --SQL 3.MqSql服务启动 4.登录和退出 这里的ip值IP地址 5.客户端与服务器关系 6.目录结构 7.SQL 1.什么是SQL&…

AI赋能OFFICE 智能化办公利器!

ONLYOFFICE在线编辑器的最新版本8.1已经发布&#xff0c;整个套件带来了30多个新功能和432个bug修复。这个文档编辑器无疑成为了办公软件中的翘楚。它不仅支持处理文本文档、电子表格、演示文稿、可填写的表单和PDF&#xff0c;还允许多人在线协作&#xff0c;并支持AI集成&…

10、Python之写出更加Pythonic的代码:unpacking拆包机制

引言 有些小伙伴有其他编程语言的学习、使用的经验&#xff0c;然后迁移到Python。一般会比完全的新手小白&#xff0c;更快速地把Python用起来。这是他们的优势&#xff0c;但也是他们的劣势。 之所以这么说&#xff0c;是因为从其他编程语言带过来的&#xff0c;除了相通的编…

多模态:Nougat详解

文章目录 前言一、模型结构1. encoder2. decoder3. set 二、数据增强三、数据splitting the pages 四、实验评估repetitions during inference 五、代码1. 环境安装2. Dataset&#xff08;dataset.py&#xff09;3. Model&#xff08;model.py&#xff09; 总结 前言 科学知识…

【论文速读】| 用于安全漏洞防范的人工智能技术

本次分享论文&#xff1a;Artificial Intelligence Techniques for Security Vulnerability Prevention 基本信息 原文作者&#xff1a;Steve Kommrusch 作者单位&#xff1a;Colorado State University, Department of Computer Science, Fort Collins, CO, 80525 USA 关键…

给数组/对象添加一个(key-value)对象

需要将一个value值前面加上key值&#xff0c;放进数组/对象中 this.$set(res.data[0],type,1) this.$set( target, key, value ) target&#xff1a;要更改的数据源(可以是对象或者数组) key&#xff1a;要更改的具体数据 value &#xff1a;重新赋的值。 结果&#xff1a;…