【学习C++】1.开始学习C++

2023-05-16

     从今天开始学习C++,争取一年之内把《C++ Primer Plus》看上两遍,平均一周看一章,并做课后对应习题。

     今天把《C++ Primer Plus》的第二章看完了,因为只是一些涉及到C语言和C++的简单的基础知识,所以看的速度非常快,一下午加一晚上就把书仔细的看了一遍,并将课后习题做了一下。虽然内容很简单,但还是得到了一些新的东西。下面将今天看的需要注意的基本点总结一下。

    本章主要讲了C++中最基础的知识,main()函数、头文件、预处理、C++中的一些简单语句、名称空间、函数、用cin、cout进行输入输出等。

1. 函数简介

    函数包括函数头和函数体。函数头描述了函数与调用它的函数之间的接口,包括函数名称、传递给函数的参数信息和函数的返回值类型三个部分。main()函数是最基本的函数,main()函数被启动代码调用,而启动代码是由编译器添加到程序中的,是程序和操作系统之间的桥梁。可以将操作系统看做调用程序。因此main()的返回值不是返回给程序的其他部分,而是返回给操作系统。

2. main函数的格式

    在C语言中,省略返回类型相当于说函数的类型为int(如经典C函数头:main() )。然而C++逐渐淘汰了这种用法;

    有些程序员使用void main()函数头,并省略返回语句,这在逻辑上是一致的,因为void返回类型意味着函数不反悔任何值。这种形式适用于很多系统,但由于它不是当前标准强制的一个选项,因此在有些系统上不能工作。所以我们应避免使用这种形式;

   我们应使用C++标准格式:int main()或者int main(void)

3. #include的作用

    预处理编译指令#include<文件A>的作用是:在对程序进行预处理时,会将文件A的内容添加到程序中,这是一种典型的预处理操作:在程序执行之前,替换或添加文本。如 在程序中使用cin和cout进行输入输出时,必须要包含此头文件:#include<iostream>。因为在使用cin和cout进行输入输出时,需要使用iostream文件中的多个定义(cin和cout其实分别是在iostream文件中istream类和ostream类的一个对象,这些类和对象的定义都在文件iostream中,所以需要iostream文件),#include编译指令将导致iostream文件中的内容随源代码文件的内容一起呗发送给编译器。实际上iostream文件的内容在预处理过后将取代代码行#include<iostream> 。

4. 名称空间

     名称空间支持是一项C++特性,旨在让用户在编写大型程序以及将多个厂商的代码组合起来时更容易。因为在使用多个厂商的代码或者由多人编写一个大型程序时,在对函数进行命名时很有可能重合,这个时候编译器将不知道使用哪个版本的函数了。比如现在要使用两个封装好的产品,这两个封装好的产品中都包含一个名字为nll()的函数,这样在使用nll()函数时,编译器就不知道要使用哪个版本的nll()函数了。名称空间让厂商能够将其产品封装在一个叫做名称空间的单元中,这样就可以用名称空间的名称来指出想使用哪个厂商的产品。因此A公司可以将其定义放到一个名为A的名称空间中。这样nll()函数的全称为A::nll()。同样,B公司的nll()版本可以表示为B::nll()。

如果使用iostream,则用using namespace std;来使iostream中的定义对程序可用。若该语句放在函数定义前,则文件中的所有函数都可使用名称空间std中的所有函数;若放在特定的函数定义中,则该函数能够使用名称空间std中的所有元素;在特定的函数中使用类似using std::cout;这样的指令,则该函数能够使用特定的元素cout;完全不使用编译指令using,而是直接在要使用的元素前加上std::。如:std::cout<<"abcd"<<endl; 这样即使函数中没有using namespace std; 和using std::cout;这样的句子,程序也可以正常运行。

5. 使用cout进行输出

     如语句cout<<"abcde";其中的<<是一个插入运算符,这个语句可以理解为:将“abcde”字符串插入到输出流中。<<插入运算符与按位左移运算符是一样的,这是一个运算符重载的例子。编译器可以根据上下文来确定其含义。

6.  控制符endl

     endl是一个特殊的C++符号,表示一个重要的概念:重启一行。打印字符串时,cout不会自动移到下一行,每条cout语句的输出从前一个输出的末尾开始,如:

cout<<"the good,the";

cout<<"bad, ";

其输出将会是:the good,thebad, 

如果加上一个endl即:

cout<<"the good,the"<<endl;(endl与换行符\n的作用相同,即这条语句相当于cout<<"the good,the\n";)

cout<<"bad, ";

其输出为:the good,the

                   bad,

7. 变量声明

     为什么变量必须声明? 因为如果不进行变量声明就可以直接使用,如果错误的拼写了变量名,就会在不知不觉中创建了一个新变量。例如:

     castledark = 34;

     castledank = castledark+5;

     由于castledank是拼写错误,因此上面的语句并没有修改castledark,而是不知不觉中创建了一个新的变量castledank。这种情况很难发现,因为如果可以不进行变量声明的话,这两条语句是不违反任何语法规则的。正是因为使用变量前必须进行声明,所以如果碰到上面这种拼写错误的情况,代码将会违反“使用变量前必须声明”这种情况,编译器就会报错,从而发现问题。而不会在不知不觉中创建一个新变量。

     在C中,所有的变量声明都位于函数或者过程的开始位置,但C++中没有这种限制。通常在C++中,一般都是在首次使用变量前声明它。这样就不必在程序中到处查找,以了解变量的类型。但是没有将所有的变量名放在一起,无法对函数使用了哪些变量一目了然。

8. 使用cin进行输入

     输入时,cin使用>>从输入流中抽取字符,可以看做从键盘流入程序,通常在运算符右侧提供一个变量来接收抽取的信息。

9. 函数

    函数原型(及函数声明)只描述了函数接口,不能将其与函数定义相混淆,在使用C++中的库函数时,要将库函数相对应的头文件加进去(用#include)。头文件中只包含了函数原型,库文件中才包含了函数的编译代码。编译器编译程序时,必须在库文件中搜索所使用的函数。头文件只可以提供函数原型,但不一定会导致编译器搜索正确的库文件。

    通常在C++中,若要自定义函数,通常把函数原型放在main()函数前面,把函数定义放在main()函数后面。

    C++不允许将函数定义嵌套在另一个函数定义中,每个函数的定义都是独立的,所有函数的创建都是平等的。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【学习C++】1.开始学习C++ 的相关文章

  • python文件操作及引申的代码行数统计

    文件操作一般包括文件的读写 xff0c 文件夹的创建 xff0c 文件夹的删除等 第一部分 xff1a python文件读写的基本操作 python打开文件一般使用 open函数 xff1a open file mode 61 39 r 3
  • 超声波测距仪

    基本原理 超声波是利用反射的原理测量距离的 xff0c 被测距离一端为超声波传感器 xff0c 另一端必须有能反射超声波的物体 测量距离时 xff0c 将超声波传感器对准反射物发射超声波 xff0c 并开始计时 xff0c 超声波在空气中传
  • Authorization 值中Bearer空格加token值在python接口请求中如何实现

    在项目中每个接口请求都需要Authorization 值 xff0c 而Authorization他的值必须 Bearer 加token值 xff0c 刚开始自己忘记添加Bearer 接口请求一直拒绝访问 xff0c 后来用fiddler抓
  • printf格式化字符串漏洞原理解析

    读任意地址 printf 34 x 34 只给格式化字符串 xff0c 而不给参数 xff0c 会导致内存泄漏从而读到内存中其他地址的数据 N x参数可以以16进制方式打印第N个参数的内容 xff0c 通过修改N xff0c 我们可以遍历栈
  • 教程丨利用微软官方工具制作U盘安装Win10系统

    一 制作Win10安装U盘 1 登录网站 https www microsoft com zh cn software download windows10 下载 MediaCreationTool 工具 xff0c 这里我们直接点击 立即
  • Linux常用命令大全

    发布jar包 nohup java jar xxxx jar gt dev null 2 gt amp 1 amp 修改nginx conf 后刷新配置 usr local nginx sbin nginx t 测试配置文件修改是否正常 u
  • Zab协议详解

    什么是Zab协议 xff1f Zab协议 的全称是 Zookeeper Atomic Broadcast xff08 Zookeeper原子广播 xff09 Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性 Zab协议是
  • 谷歌浏览器安装json格式化插件

    实际开发工作中经常用到json数据 xff0c 那么就会有这样一个需求 xff1a 在谷歌浏览器中访问URL地址返回的json数据能否按照json格式展现出来 比如 xff0c 在谷歌浏览器中访问 xff1a http jsonview c
  • Seata详解(一)

    分布式事务 事务是数据库的概念 xff0c 数据库事务 xff08 ACID xff1a 原子性 一致性 隔离性和持久性 xff09 xff1b 分布式事务的产生 xff0c 是由于数据库的拆分和分布式架构 微服务 带来的 xff0c 在常
  • RocketMQ的事务消息和改造

    什么是 rmq分布式事务消息 xff1f Apache RocketMQ在4 3 0版中已经支持分布式事务消息 xff0c 这里RocketMQ采用了2PC的思想来实现了提交事务消息 xff0c 同时增加一个补偿逻辑来处理二阶段超时或者失败
  • session和token区别

    一 session的状态保持及弊端 xff08 1 xff09 当用户第1次通过浏览器使用用户名和密码访问服务器时 xff0c 服务器对用户名和密码进行验证 xff08 2 xff09 验证成功后 xff0c 在服务器端生成并保存sessi
  • 关于阿里云对RocketMQ的topic,tag,consumer关系的理解

    什么是订阅关系一致 消息队列RocketMQ版 阿里云帮助中心 RocketMQ 中Topic Tag GroupName基本概念介绍 Young丶的博客 CSDN博客 rocketmq topic和group的区别 转载
  • MySql Workbench 8.0汉化插件分享

    打开workbench的安装数据目录 xff0c 路径是 xff1a C Program Files MySQL MySQL Workbench 8 0 CE data 打开以后 xff0c 可以看到下面有一堆的xml结尾的文件 xff0c
  • Java-Jdk12版本下载后没有Jre的解决方案以及配置环境变量

    新本Jdk12版本下载后不像以前的版本会自动生成Jre文件夹 xff0c 通过dos命令行可以解决 1 下载jdk12 网址 xff1a https www oracle com technetwork java javase downlo
  • android--性能优化1--首屏优化&启动速度与执行效率检测

    文章目录 实战篇traceview 工具使用操作步骤操作步骤2 systrace 工具使用操作步骤 AOP 工具 hugo 的使用使用方法效果 BlockCanary 使用AOP 工具使用 AspectJ操作步骤 优化方案 异步线程优化 针
  • error Failed connect to github.com 443原因 Github更换认证方式

    Github更换认证方式 github近期调整了认证方式 xff0c 不再允许第三方工具基于账号密码来访问和管理项目了 除非使用github DeskTop 自带的客户端 好坑啊 我一直再用android studio 自带的提交工具很方便
  • AppCompatRatingBar备份用 下次拷贝直接用自定义图片背景

    控件 lt androidx appcompat widget AppCompatRatingBar android id 61 34 64 43 id rating bar 34 style 61 34 64 style myRating
  • 备份Edittext编辑框字数限制ui以及逻辑

    ui布局 etContent addTextChangedListener new TextWatcher 记录输入的字数 private CharSequence enterWords private int selectionStart
  • android—性能优化2—内存优化

    文章目录 性能优化 工具 memory profilerLeakCanaryarthookepic 库 java内存管理机制java 内存回收机制Android内存管理机制Dalvik与 Art区别Low Memory Killer 内存抖
  • glide4.11.0封装gfilib优化gif图片加载

    文章目录 具体步骤 下载giflib 和 framesequence导入并集成 giflib 和 framesequenceglide的配置gif使用giflib集成开始使用加载思路创建自定义GifDrawable 需求 目前项目中加载进度

随机推荐

  • java筑基.泛型,反射,注解-利用注解加反射练习

    文章目录 泛型 泛型类泛型方法泛型接口子类明确泛型类的类型参数变量子类不明确泛型类的类型参数变量 限定类型变量通配符泛型 注解元注解注解的应用场景 反射 注解 43 反射练习 泛型 把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特
  • android性能优化实践与总结(包含启动,内存优化)

    应用中性能优化实践与总结 精心总结 任何优化都需要进行检测 以数据说话 优化前和优化后有了怎样的提升 TOC 启动优化 检测启动时间 检测工具任选其一 hugo 插件 自己定义时间开始和结束手动计算时间 AOP 工具 AspectJ adb
  • android—性能优化3—网络优化

    文章目录 网络优化正确的认识流量消耗网络优化维度其他网络请求误区 网络优化工具选择Network Proifiler抓包工具stetho流量优化如何判断APP流量消耗偏高如何测试 测试方案 线上线下流量获取线上流量获取方案NetworkSt
  • java 实现死锁

    资源抢占 导致死锁 public static void main String args final Object a 61 new Object final Object b 61 new Object Thread threadA 6
  • cameraX视频录制 拷贝直接用

    文章目录 效果图activity代码项目地址 最下面是GIT 地址 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 3i0EaImv 1637722081187 https liudao01 github io
  • android studio maven 拉取代码出现 bad gateway 502

    一般都是gradle 配置的maven的仓库 问题 我这里是因为使用了 repositories google jcenter mavenCentral 新增 maven url 39 https www jitpack io 39 mav
  • android studio使用 maven push 插件上传私有maven - 已成功使用到项目中

    gradle 任务 下面是放在gradle 配置里面 比如 我的项目model 是 apm 那么 就把下面的代码放到 apm的 gradle 下面 plugins id 39 com android library 39 id 39 kot
  • 工作的三个层次,什么样的工作堪称自由

    工作的三个层次 xff0c 什么样的工作堪称自由 先说结论 只有工作的技艺人才是自由的 前段时间经常喜欢看建造类的视频 一个澳洲小哥 只用最原始的器械徒手打造东西 比如空手打造石斧 空手打造钻木取火套装等等 这类视频很有意思 我就特别爱看
  • android 创建Model 解决无法依赖传递问题 , 实现 sdk 依赖关系的传递

    介绍 我现在创建了一个应用A 一个库工程 B B 远程依赖了库工程C A远程依赖B工程 B 是通过Maven 发布成远程依赖库 B 作为一个通用的库工程 发布到了Maven上 就可以比较简单的被各个项目引入 如下图 问题 目前存在一个问题
  • 2021总结. 2022展望

    2021 收获了许多 技能上 学习了多个技能 自由泳自由倒立复刻拳王梅威瑟的跳绳训练单板滑雪 总结 技能上尽量是身体力行的 自从看过 囚徒健身 后 被作者的自传所影响 希望成为想他那样的人 认知上 认知上也有了提升 读了许多书 今年比较喜欢
  • 仿照爱时间app写的时钟 自定义view

    MyClockView MyClockView 仿照 爱时间app 写的自定义时间控件 爱时间的 控件 我写的控件 可以看到我写的在指针 刻度上面 是比他要精细一些的 后面的点击事件 还有中间文字的绘制 都是一些套路 我的时间也不够多 就不
  • dagger2简单使用与理解笔记

    文章目录 使用dagger2好处具体案例查看github 1 使用dagger2注入基本使用流程概念 2 dagger2中各种注解基本使用引入dagger20 写两个对象 用来实际操作的1 写module类 注解Module Provide
  • electron调用dll文件

    Electron 对系统层能力的使用可能比较弱 xff0c 此时需要求助 Python C 43 43 C 等语言 xff0c 通过 ffi napi 库可以让 Node js 使用 C 43 43 dll xff0c 通过 electro
  • 动态库和静态库的区别

    什么是库文件 一般来说 一个程序 通常都会包含目标文件和若干个库文件 经过汇编得到的目标文件再经过和库文件的链接 就能构成可执行文件 库文件像是一个代码仓库或代码组件的集合 为目标文件提供可直接使用的变量 函数 类等 库文件包含了静态链接库
  • reactor/proactor模型简介

    Reactor和preactor都是IO多路复用模式 xff0c 一般地 I O多路复用机制都依赖于一个事件多路分离器 Event Demultiplexer 分离器对象可将来自事件源的I O事件分离出来 xff0c 并分发到对应的read
  • c语言中的带参宏定义

    C语言允许宏带有参数 在宏定义中的参数称为形式参数 xff0c 在宏调用中的参数称为实际参数 xff0c 这点和函数有些类似 对带参数的宏 xff0c 宏展开和用实参替代形参 xff0c 发生在预处理阶段 示例1 xff1a define
  • ZCU102 Zynq MPSoC IP设置与说明

    目录 1 前言2 设置与说明2 1 PS UltraScale 43 Block Design2 2 I O Configuration2 2 1 Bank0 3电压 xff1a 2 2 2 Low SpeedQSPISD卡CANI2CPM
  • ROS下使用激光雷达RPLIDAR-A2进行SLAM完成地图的构建

    想要进行一个完整的地图建立离不开以下几个模块 xff1a 1 坐标 2 激光数据 3 绘图算法 ROS工程可以从我的GitHub上面下载 xff1a https github com LJianlin ROS SLAM Gmapping 下
  • C 语言Socket 实现http 带参数的POST请求

    本文叙述C语言中结合socket 如何实现http POST请求 xff0c 对于http协议相关内容可以查看HTTP协议详解 对于不带参数的post请求 xff0c 只需要按照http格式发送即可 下面以带参数的POST请求为例 1 C
  • 【学习C++】1.开始学习C++

    从今天开始学习C 43 43 xff0c 争取一年之内把 C 43 43 Primer Plus 看上两遍 xff0c 平均一周看一章 xff0c 并做课后对应习题 今天把 C 43 43 Primer Plus 的第二章看完了 xff0c