《C++ Primer Plus》《2、开始学习C++》
文章目录
- 0 前言:
- 1 进入C++
- 1.1 main()函数
- 1.2 C++注释
- 1.3 预处理器和iostream
- 1.4 头文件名
- 1.5 名称空间
- 1.6 使用cout进行C++输出
- 1.7 C++源代码的格式化
- 2 C++语句
- 2.1 声明语句和变量
- 2.2 赋值语句
- 2.3 cout语句
- 3 其他C++语句
- 3.1使用cin
- 3.2 使用cout进行拼接
- 3.3 类简介
- 4 函数
- 4.1 有返回值的函数
- 4.2 函数变体
- 4.3用户自定义的函数
- 4.4 用户定义有返回值的函数
- 4.5 使用using编译指令
- 5 总结
- 6 参考
0 前言:
基础知识是对C++特性,历史的一些介绍,并不涉及C++语言的实质。本章对C++语言的基本结构做一下概述,具体的细节,日后会一步步去完善。
1 进入C++
任何一句语言的初始,便是在界面上输出“Hello World!”,进而打开新世界的大门,感觉不对这个世界打声招呼,不好意思开始一样。C++也不例外。
#myfirst.cpp
#include<iostream>
int main(){
using namespace std;
cout <<"Hello World!";
cout << endl;
return 0;
}
之前学过C的会对这个程序既陌生又熟悉,下面来对myfirst.cpp程序的元素进行分析:
1)注释//;
2)预处理编译指令#include;
3)主函数int main();
4)编译指令 using namespace;
5)函数体的部分用{}包围;
6)用cout 显示消息语句;
7)用return 语句终结函数。
1.1 main()函数
myfirst.cpp的程序框架如图:
int main(){
statements;
return 0;
}
最早在学习C语言的时候,就一直在main()函数里面捣腾,所以对main语言,再熟悉不过。int main()叫函数头,{}括起来的部分叫作函数体,在C++中,每条完整的指令都成为语句,用分号来结束。其中最后一条return 0语句叫作返回语句,用它来对函数进行终结。
对main()函数作如下说明:
1)为什么只能是main()函数:
而不是A函数,B函数,C函数。我的解释是:当程序只有一个函数时,这个函数必须只能是main()函数(规定的事,不照办不好使),在运行C++程序时,通常是从main()函数开始执行的,如果没有main(),程序是不完整的,也将无法进行编译。
2)int main代表了什么
来看一下main()的接口描述,该接口从int 开始,main()函数将返回一个整数值,即int规定了函数返回值的类型。int main是一种缩略的写法,完整的写法是int main(void)。
3)语句与分号
语句是要执行的操作,为了理解源代码,编译器需要知道语句如何进行起止。语句之间需要使用语句分隔符,在C++中,使用的是分号对语句进行分隔。
1.2 C++注释
写程序,必须要进行注释,不然无法让别人对你的程序进行理解。C++的注释方式沿袭了C。有两种注释方法。
1)//用来对行进行注释,无法跨行发生作用;
2)/* */的注释,可以跨行进行注释。
1.3 预处理器和iostream
在学习的初期,这样的两行代码基本成了标配:
#include<iostream>
using namespace std;
#include是一种预处理,将iostream中的内容加入到程序中来,程序不仅仅只是main就完全实现功能,需要在源代码编译之前替换或添加文本。
1.4 头文件名
像iostream这样的文件就叫作包含文件(也叫作头文件),C++编译器自带了很多头文件,每个头文件都支持一组特定的工具,让程序在实现功能的前提下轻装上阵。以前的C++头文件都有“.h”的后缀,新式的C++风格没有扩展名。
头文件类型 | 约定 | 示例 | 说明 |
---|---|---|---|
C++旧式风格 | 以.h结尾 | iostream.h | C++可用 |
C旧式风格 | 以.h结尾 | math.h | C,C++可用 |
C++新式风格 | 没有扩展名 | iostream | C++可用 |
转换后的C | 加上前缀c,没有扩展名 | cmath | C++可用 |
1.5 名称空间
using namespace std;叫作using编译指令,名称空间支持是C++的一个特性。举个例子:用两个已经封装好的产品,里面都包含了一个函数——walk(),编译器不知道这个函数该用哪个产品的,这时候便可以用名称空间来进行标定,比如A公司的函数,A::walk();若是B公司的,则用B::walk()来进行表示。这样程序就可以使用名称空间来区分不同的版本。
就好像是个百宝箱,但是要先using先声明一下,才可以使用。
1.6 使用cout进行C++输出
之前的“Hello world”程序,利用cout进行输出,双引号将字符串框起来,不用管里面是什么,计算机会对他进行输
出的处理。
cout <<"Hello World!";
cout << endl;
"<< "表示该语句将字符串发送给了cout,有一种很形象的说法,这个符号指出了信息流动的路径。从C++的概念上理解这个过程,输出是一个流,即从程序流出的一段字符串。cout对象属性包括一个插入运算符,他可以将右侧的信息插入到流中。与其说程序显示了一条消息,不如说他将一个字符串插入到了输出流中。
补充:
a.cout<<endl,endl被称为控制符,endl也是在iostream中定义的,
b.C语言中的换行符是”\n”,\n叫作换行符,在C++也能使用。
1.7 C++源代码的格式化
- 1)源代码中的标记与空白
a.在一行代码中不可分割的元素叫作标记;
b.空格,制表符,回车统称为空白;
字符与字符之前需要添加一些空白,适当的空白使得程序可读性更强;不合时宜的空白会使得程序报错。
- 2)C++源代码的风格
为了提升自己的编码水平,首先需要输入一些“代码是非观“知道哪些是好的,高水平的代码。如下是编程需要遵循的一些原则。
a.一条语句占据一行,不要一条语句占据多行;
b.每个函数都有{},这两个花括号各占一行;
c.为了条理清晰,函数中的语句相对于花括号需要进行缩进;
d.与函数名称相关的圆括号周围没有空白。
2 C++语句
书中给出了carrots.cpp的示例代码。
2.1 声明语句和变量
声明语句,即你在用这个变量的时候,需要确定这个变量是哪种数据类型,以及它自身的变量名称。原则是:使用这个变量前需要先对其进行声明。
2.2 赋值语句
声明这个变量还不够,需要对其进行赋值,才能知道这个变量的具体数值,否则只会是一个没有意义的随机数。“=“是赋值语句。
2.3 cout语句
cout不仅可以打印字符串,也可以打印出变量的值,而不用对变量的数值类型做声明,我觉得这是C++比C更智能的地方。
3 其他C++语句
3.1使用cin
cin是与cout相对应的概念,cout是将字符串插入到数据流中,相对应的,cin是使用运算符>>从输入流中抽取字符。
3.2 使用cout进行拼接
C++的自由格式,将标记间的换行符和空格看作是可以相互替换的。
cout<<"Hello"<<"world";等价于
cout <<"Hello"
<<"world";
3.3 类简介
类是用户定义的一种数据类型,需要描述它能够表示什么信息,以及可对数据执行哪些操作,后续会详细讲解。
4 函数
程序的实现依赖于函数,所以有必要加深对函数的理解。
4.1 有返回值的函数
顾名思义,这个函数带有一个返回值,而调用这个函数的程序将会获得这个返回值。书中以sqrt()举例,说明调用函数后的具体流程。
4.2 函数变体
2.4.1的sqrt()函数,中规中矩,它既有输入的参数,也拥有返回值。但是函数的参数,可以没有,可以有1个,也可以有很多个,这都是允许的。至于返回值,函数可以有返回值,也可以没有返回值,只是完成相应操作即可。
4.3用户自定义的函数
从图像中可以看出,首先包含了头文件,使用了using编译指令,在main()函数之前声明了函数原型,然后在写函数的实现方式,最后main()函数在实现的过程中调用自定义的函数,过程大抵如此。
4.4 用户定义有返回值的函数
一个函数的特性:
1)有函数头和函数体
2)接受一个参数
3)返回一个值
4)需要一个原型(声明一个原型)
在对传入的参数,做一定的处理之后,return 即可。
4.5 使用using编译指令
在初期需要用到cin,cout,endl,这些都需要先using std的名称空间,当然这是偷懒的做法。例如在头函数包含下,添加语句using namespace std后便可以直接使用cin,cout,endl;若是不添加的话,需要这样表示——
std::cin>>
std::cout<<
std::endl.
5 总结
这一章通过“HelloWorld.cpp”敲开了C++的大门,了解了预编译处理器,头文件,using编译指令,main函数,其他功能函数,以及C++的6种语句,cin,cout,C++的学习之路刚刚开始。
6 参考
《C++ Primer Plus》
相关文章:
《C++ Primer Plus》《2、开始学习C++》
文章目录 0 前言:1 进入C1.1 main()函数1.2 C注释1.3 预处理器和iostream1.4 头文件名1.5 名称空间1.6 使用cout进行C输出1.7 C源代码的格式化 2 C语句2.1 声明语句和变量2.2 赋值语句2.3 cout语句 3 其他C语句3.1使用cin3.2 使用cout进行拼接3.3 类简介 4 函数4.1 …...

Backtrader 文档学习- Sizers
Backtrader 文档学习- Sizers 1.概述 智能仓位 Strategy提供了交易方法,即:buy,sell和close。看一下buy的定义: def buy(self, dataNone,sizeNone, priceNone, plimitNone,exectypeNone, validNone, tradeid0, **kwargs):注意&…...

基于YOLOv8算法的照片角度分类项目实践
目录 一、任务概述二、YOLOv8算法简介2.1 算法改进2.2 算法特点2.3 网络结构2.4 性能比较 三、工程实践3.1 安装算法框架库ultralytics3.2 库存照片预处理3.2.1 提取所有图片3.2.2 去除冗余的相同照片3.2.3 去除无车辆照片3.2.4 随机提取指定数量的图片 3.3 照片朝向分类3.3.1 …...

go语言进阶篇——面向对象(一)
什么是面向对象 在我们设计代码时,比如写一个算法题或者写一个问题结局办法时,我们常常会使用面向过程的方式来书写代码,面向过程主要指的是以解决问题为中心,按照一步步具体的步骤来编写代码或者调用函数,他在问题规…...

C#,栅栏油漆算法(Painting Fence Algorithm)的源代码
1 刷油漆问题 给定一个有n根柱子和k种颜色的围栏,找出油漆围栏的方法,使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的,所以返回10^97的模。 计算结果: 2 栅栏油漆算法的源程序 using System; namespace Legalsoft.Tr…...

java_error_in_pycharm.hprof文件是什么?能删除吗?
java_error_in_pycharm.hprof文件是什么?能删除吗? 🌵文章目录🌵 🌳引言🌳🌳hprof格式文件介绍🌳🌳java_error_in_pycharm.hprof文件什么情况下能删除🌳&…...
LeetCode 491 递增序列
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明: 给定数组的长度不会超过15。 数组中的整数范围是 [-…...

考研/计算机二级数据结构刷题之顺序表
目录 第一题 顺序表的初始化,销毁,头插,尾插,头删,尾删,指定位置插入,指定删除以及打印 第二题 移除元素 题目链接: OJ链接 题目详解:移除元素 第三题:删…...

Git 代码协同的使用方法 for Azure DevOps
1. 登陆Azure 步骤1.1. VS Code,登陆Azure Cloud的Ubuntu环境,如下: 重点: 这里的Azure Cloud的用户名是YourAzureUserName,口令是YourAzurePassword 步骤1.2. 登陆Azure Cloud的Ubuntu环境后,配置Git账户信息&…...

数据库学习笔记2024/2/5
2. SQL 全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了 一套操作关系型数据库统一标准 2.1 SQL通用语法 在学习具体的SQL语句之前,先来了解一下SQL语言的通用语法。 1). SQL语句可以单行或多行书写&…...

PSM-Net根据Stereo图像生成depth图像
一、新建文件夹 在KITTI数据集下新建depth_0目录 二、激活anaconda环境 conda activate pt14py37三、修改submission.py文件 3.1 KITTI数据集路径 parser.add_argument(--datapath, default/home/njust/KITTI_DataSet/00/, helpselect model)3.2 深度图像输出路径 save…...

Mocaverse NFT 概览与数据分析
作者:stellafootprint.network 编译:mingfootprint.network 数据源:Mocaverse NFT Collection Dashboard Mocaverse 是 Animoca Brands 推出的专属 NFT(非同质化代币)系列,包含 8,888 个独特的 "M…...

SpringBoot之事务源码解析
首先事务是基于aop的,如果不了解aop的,建议先去看下我关于aop的文章: Spring之aop源码解析 先说结论,带着结论看源码。首先,在bean的生命周期中, 执行实例化前置增强,会加载所有切面并放入缓存࿰…...

FPGA高端项目:解码索尼IMX327 MIPI相机转USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持
目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构FPGA逻辑设计工程源码架构SDK软件工程源…...

基于高通滤波器的ECG信号滤波及心率统计matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 ECG信号简介 4.2 高通滤波器原理 4.3 心率统计 5.完整工程文件 1.课题概述 通过高通滤波器对ECG信号进行滤波,然后再统计其心率。 2.系统仿真结果 3.核心程序与模型 版本:…...

springCould中的gateway-从小白开始【9】
目录 1.🍟网关是什么 2.🍿gateway是什么 3.🥚gateway能什么 4.🌭核心概念 5.🧂工作流程 6.🧈实例 7.🥓gateway网关配置的方式 8.🍳配置动态路由 9.🧇pred…...

邮箱营销软件推荐?企业邮箱群发会限制吗?
邮箱营销平台怎么选择?哪种邮箱适合做外贸邮件群发? 邮箱营销凭借其精准触达、低成本和高回报的特点,依然是许多企业不可或缺的营销手段。该如何选择一款适合自己的工具呢?蜂邮EDM将为您推荐几款优秀的邮箱营销软件,并…...

编译原理实验3——自下而上的SLR1语法分析实现(包含画DFA转换图、建表、查表)
文章目录 实验目的实现流程定义DFA状态实现代码运行结果测试1测试2测试3 总结 实验目的 实现自下而上的SLR1语法分析,画出DFA图 实现流程 定义DFA状态 class DFA:def __init__(self, id_, item_, next_ids_):self.id_ id_ # 编号self.item_ item_ # productio…...

基于tomcat的https(ssl)双向认证
一、背景介绍 某个供应商服务需要部署到海外,如果海外多个地区需要部署多个服务,最好能实现统一登录,这样可以减轻用户的使用负担(不用记录一堆密码)。由于安全问题(可能会泄露用户数据)&#x…...

【iOS ARKit】3D人体姿态估计实例
与2D人体姿态检测一样,在ARKit 中,我们不必关心底层的人体骨骼关节点检测算法,也不必自己去调用这些算法,在运行使用 ARBodyTrackingConfiguration 配置的 ARSession 之后,基于摄像头图像的3D人体姿态估计任务也会启动…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...