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

        大家好啊。最近学习了一点关于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加加的学习和使用的话会用的比较多。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【技术选型】FastDFS、OSS如何选择

【技术选型】FastDFS、OSS如何选择 开篇词&#xff1a;干货篇&#xff1a;FastDFS&#xff1a;OSS&#xff08;如阿里云OSS&#xff09;&#xff1a; 总结篇&#xff1a;我是杰叔叔&#xff0c;一名沪漂的码农&#xff0c;下期再会&#xff01; 开篇词&#xff1a; 文件存储该选…

腐蚀服务器如何设置管理员

可以设置服主与管理员 控制台中设置&#xff08;需游戏账号在线&#xff09; 服主 添加&#xff1a;在控制台中输入ownerid空格SteamID 删除&#xff1a;在控制台中输入removeowner空格SteamID 管理员 添加&#xff1a;在控制台中输入moderatorid空格SteamID 删除&#…

基于SpringBoot的网上书城管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;基于SpringBoot框架 工具&#xff1a;Eclipse&#xff0c;MySQL 系统展示 首…

卷积神经网络之ResNet50迁移学习

数据准备 下载狗与狼分类数据集&#xff0c;数据来自ImageNet&#xff0c;每个分类有大约120张训练图像与30张验证图像。使用download接口下载数据集&#xff0c;并自动解压到当前目录。 全是小狗的图片 另一边全是狼的图片 加载数据集 狼狗数据集提取自ImageNet分类数据集&a…

无缝协作:如何实现VMware与Ubuntu虚拟机的剪切板共享!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 剪贴板共享 📒📝 VMware设置📝 安装VMware Tools或open-vm-tools📝 验证剪贴板共享功能⚓️ 相关链接 🚓️📖 介绍 📖 无缝的剪贴板共享是提高工作效率的关键。在VMware和Ubuntu虚拟机的协同工作中,能够直接在宿…

Date TimePicker 时间选择器精确限制到时分秒,此刻按钮点击失效处理

今天在开发的时候遇到一个需求&#xff0c;日期时间选择器组件不能选择已经过去的年月日时分秒。用户只能选择当前时间的时间&#xff0c;如果年月日选择是当天之前的时间&#xff0c;时分秒不做限制&#xff0c;如果年月日选择的是当天时间&#xff0c;就要判断时分秒&#xf…

LORAHUB: EFFICIENT CROSS-TASK GENERALIZATION VIA DYNAMIC LORA COMPOSITION

文章汇总 动机 效果如上&#xff1a;希望将多个任务训练得到的LoRA组合起来&#xff0c;效果比单独一个任务得到的LoRA效果更好。 愿景&#xff1a;那未来我们每个人都贡献出自己训练出来的LoRA&#xff0c;之后通过LoRAHub简单组合起来&#xff0c;就可以得到适用于多任务且功…

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

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

【微信小程序开发实战项目】——个人中心页面的制作

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

App Cleaner Uninstaller 8.3.0激活版 最佳卸载程序和清理助手

App Cleaner & Uninstaller 完全安全地删除 Mac 上的程序&#xff0c;删除应用程序的残留物&#xff0c;管理扩展程序和启动程序。 App Cleaner & Uninstaller 8.3.0激活版下载 卸载应用程序和所有不需要的垃圾文件 当您将应用程序拖放到废纸篓时&#xff0c;请检查您…

VS2019_新建窗体应用文件SOP

文章目录 1. 打开VS2. 创建新项目3. 选择Windows窗体应用4. 起名&#xff0c;选位置&#xff0c;框架版本选择4.5及之后&#xff0c;这里选的4.85. 新建完成 1. 打开VS 2. 创建新项目 3. 选择Windows窗体应用 注意要选.NET的 4. 起名&#xff0c;选位置&#xff0c;框架版本…

分布式IO模块软件配置

组态接口模块 1、打开网络视图 2、拖拽出ET200SP 3、双击ET200SP的图片&#xff0c;进入从站配置 总线适配器的组态更换 关于IO地址分配&#xff0c;需要建立好子网通信后&#xff0c;在主机上配置。 可以看到IP 和设备名 设备与控制器的Profinet连接 先找到设备名称再找…

Python股票计算小程序(字符串格式化练习)

要求&#xff1a;打印的第一行使用f控制&#xff0c;第二行打印使用占位符&#xff0c;股价输出保留两位小数。 # 股价计算小程序 name"周氏集团" stock_price19.99 stock_code "9283" stock_price_daily_growth_factor1.2 growth_days7print(f"公司…

tableau基本表的使用 - 6

基本表的使用 1. 基本表1.1 基本表的使用 2. 凸显表的使用2.1 使用一2.2 使用二2.3 二值凸显表 1. 基本表 1.1 基本表的使用 获取行 文本标签 2. 凸显表的使用 2.1 使用一 点击智能显示&#xff0c;点击凸显表 2.2 使用二 标记&#xff1a;方块记录数&#xff1a;颜色…

【深度学习基础】环境搭建 Linux报错bash: conda: command not found...

目录 一、 问题描述二、 解决方法1. 在.bashrc文件中添加环境变量2. 卸载重装anconda 三、总结 一、 问题描述 在linux环境下安装anaconda时候报错&#xff1a;bash: conda: command not found… 二、 解决方法 1. 在.bashrc文件中添加环境变量 参考链接&#xff1a;【解决】…

Temu是什么?Temu自养号测评有什么优势?

一、 Temu是什么&#xff1f;Temu是拼多多于海外线的跨境电商平台&#xff0c;“Temu”这个名字的含义也和拼多多的意思相近。Temu跨境电商自上线以来&#xff0c;下载量不断攀升&#xff0c;发展势头一片大好&#xff0c;击穿地板价的商品在欧美市场掀起了一阵狂潮&#xff0c…

SpringAOP的坑

AOP中几种常见的通知类型及其基本作用&#xff1a; Before&#xff1a;前置通知&#xff0c;在目标方法执行之前执行。After&#xff1a;后置通知&#xff0c;无论方法执行结果如何&#xff08;包括异常&#xff09;&#xff0c;都会在目标方法执行之后执行。AfterReturning&a…

自动驾驶算法———车道检测(一)

“ 在本章中&#xff0c;我将指导您构建一个简单但有效的车道检测管道&#xff0c;并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入&#xff0c;并产生车道边界的数学模型作为输出。图像由行车记录仪&#xff08;固定在车辆挡风玻璃后面的摄像头&#xff09;捕获。…

原生APP开发的优势

原生APP开发是指使用特定的编程语言和开发工具&#xff0c;针对特定的操作系统平台进行开发的应用程序。相比于混合开发和Web开发&#xff0c;原生APP开发具有以下优势。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 性能更优 原…

单一设备上的 2 级自动驾驶:深入探究 Openpilot 的奥秘

Level 2 Autonomous Driving on a Single Device: Diving into the Devils of Openpilot 单一设备上的 2 级自动驾驶&#xff1a;深入探究 Openpilot 的奥秘 Abstract Equipped with a wide span of sensors, predominant autonomous driving solutions are becoming more m…