柳州网站建设优化推广/天天自学网网址
C++ Primer 第1章 开始
- 1.1 编写一个简单的C++程序
- 1.1.1 编译、运行程序
- 一、程序源文件命名约定
- 二、从命令行运行编译器
- 练习
- 1.2 初识输入输出
- 一、标准输入输出对象
- 二、一个使用IO库的程序
- 三、向流写入数据
- 四、使用标准库中的名字
- 五、从流读取数据
- 六、完成程序
- 1.3 注释简介
- 一、C++中注释的种类
- 二、注释界定符不能嵌套
- 1.4 控制流
- 1.4.1 while语句
- 1.4.2 for语句
- 练习
- 1.4.3 读取数量不定的输入数据
- 1.4.4 if语句
- 1.5 类简介
- 1.5.1 Sales_item类
- 一、读写Sales_item
- 二、Sales_item对象的加法
- 1.5.2 初识成员函数
- 一、什么是成员函数?
- 1.6 书店程序
- 小结
- 术语
1.1 编写一个简单的C++程序
每个C++程序都包含一个或多个函数,其中一个必须命名为main。操作系统通过调用main来运行C++程序。
// main函数的返回类型必须为int
int main()
{return 0; // 在大多数系统中,main的返回值被用来指示状态。返回值0表明成功,非0的返回值的含义由系统定义,通常用来指出错误类型
}
一个函数的定义包含四部分:
(1)返回类型
(2)函数名
(3)一个括号包围的形参列表(允许为空)
(4)函数体:以左花括号开始,以右花括号结束的语句块
1.1.1 编译、运行程序
一、程序源文件命名约定
源文件后缀:.cc、.cxx、.cpp、.cp、.C
二、从命令行运行编译器
// CC是编译器程序的名字,$是系统提示符
$ CC prog1.cc// 编译器生成一个可执行文件,Windows系统将可执行文件命名为prog1.exe,UNIX系统将可执行文件命名为a.out
// 在Windows系统中运行可执行文件
$ prog1 // 可忽略扩展名.exe
$ .\prog1 // "."后跟一个反斜线指出文件在当前目录中
// 在UNIX系统中运行可执行文件
$ a.out
$ ./a.out // "."后跟一个斜线来指出可执行文件位于当前目录中
// 访问main的返回值的方法依赖于系统
// 在UNIX和Windows系统中,执行完一个程序后,都可以通过echo命令获得其返回值
$ echo $? // UNIX
$ echo %ERRORLEVEL% // Windows
// 运行GNU编译器的命令是g++
$ g++ -o prog1 prog1.cc
// $是系统提示符
// -o prog1是编译器参数,指定了可执行文件的文件名。
// 在不同的操作系统中,此命令生成一个名为prog1(UNIX)或prog1.exe(Windows)的可执行文件
// 如果省略了-o prog1参数,在UNIX系统中编译器会生成一个名为a.out的可执行文件,在Windows系统中会生成一个名为a.exe的可执行文件
// 根据使用的GNU编译器的版本,可能需要指定-std=c++0x参数打开对C++11的支持// 运行微软Visual Studio编译器的命令为c1
C:\Users\me\Programs> c1 /EHsc prog1.cpp
// C:\Users\me\Programs>是系统提示符,Users\me\Programs是当前目录名
// 命令c1调用编译器,/EHsc是编译器选项,用来打开标准异常处理
// 微软编译器会自动生成一个可执行文件prog1.exe// 编译器通常都包含一些选项,能对有问题的程序结构发出警告。
// GNU编译器使用-Wall选项
// 微软编译器使用/W4
练习
Windows 7操作系统并不处理或报告程序返回的错误标识,直观上,返回-1的程序与返回0的程序在执行效果上并无不同。但环境变量ERRORLEVEL记录了上一个程序的返回值。因此,在控制台窗口执行修改后的程序,接着执行echo %ERRORLEVEL%,会输出-1。在Linux系统中,执行echo $?有类似效果。
1.2 初识输入输出
iostream库包含两个基础类型istream和ostream,分别表示输入流和输出流。
一、标准输入输出对象
1、标准输入:cin(istream类型对象)
2、标准输出:cout(ostream类型对象)
3、标准错误:cerr(ostream类型对象),输出警告和错误消息。默认情况下,写到cerr的数据是不缓冲的。
4、clog(ostream类型对象),输出程序运行时的一般性信息。默认情况下,写到clog的数据是被缓冲的。
系统通常将程序所运行的窗口与这些对象关联起来。当我们读取cin,数据将从程序正在运行的窗口读入,当我们向cout、cerr和clog写入数据时,将会写到同一个窗口。
二、一个使用IO库的程序
#include <iostream>int main()
{// <<输出运算符:左侧必须是ostream对象,右侧是要打印的值// 此运算符将给定的值写到给定的ostream对象中,输出运算符的计算结果就是其左侧运算对象// 前缀std::指出名字cout和endl是定义在名为std的命名空间中的std::cout << "Enter two numbers:" << std::endl;// 写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流int v1 = 0, v2 = 0;// >>输入运算符:左侧必须是istream对象,右侧为给定对象// 从给定的istream读入数据,并存到给定对象中,输入运算符返回其左侧运算对象作为其计算结果std::cin >> v1 >> v2;std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl;return 0;
}
三、向流写入数据
在C++中,一个表达式产生一个计算结果,它由一个或多个运算对象和(通常是)一个运算符组成。
四、使用标准库中的名字
标准库定义的所有名字都在命名空间std中。
五、从流读取数据
六、完成程序
1.3 注释简介
一、C++中注释的种类
1、单行注释:以双斜线(//)开始,以换行符结束。
2、界定符对注释:以 /* 开始,以 */ 结束。当注释界定符跨越多行时,最好能显式指出其内部的程序行都属于多行注释的一部分,注释行的每行都以一个星号开头。
二、注释界定符不能嵌套
我们通常需要在调试期间注释掉一些代码。由于这些代码可能包含界定符对形式的注释,因此可能导致注释嵌套错误,因此最好的方式是用单行注释方式注释掉代码段的每一行。
1.4 控制流
1.4.1 while语句
// while语句反复执行一段代码,直至给定条件为假为止
// 求1到10这10个数之和
#include <iostream>int main()
{int sum = 0, val = 1;while (val <= 10) {sum += val;++val;}std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;return 0;
}
1.4.2 for语句
#include <iostream>int main()
{int sum = 0;// 每个for语句都包含两部分:循环头和循环体// 循环头控制循环体的执行次数,它由三部分组成:初始化语句、循环条件、表达式for (int val = 1; val <= 10; ++val) {sum += val;}std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;return 0;
}
练习
for循环与while循环对比:
在循环次数已知的情况下,for循环的形式更为简洁。
在循环次数无法预知时,用while循环实现更适合。用特定条件控制循环是否执行,循环体中执行的语句可能导致循环判定条件发生变化。
1.4.3 读取数量不定的输入数据
#include <iostream>int main()
{int sum = 0, value = 0;// while循环条件实际上检测的是std::cin// 当我们使用一个istream对象作为条件时,其效果是检测流的状态。// 如果流是有效的,即流未遇到错误,那么检测成功// 当遇到文件结束符,或遇到一个无效输入时(例如读入的值不是一个整数),istream对象的状态变为无效。处于无效状态的istream对象会使条件变为假while (std::cin >> value) {sum += value;}std::cout << "Sum is " << sum << std::endl;return 0;
}
当从键盘向程序输入数据时,对于如何指出文件结束,不同操作系统有不同的约定。在Windows系统中,输入文件结束符的方法是敲Ctrl+Z,然后按Enter或Return键。在UNIX系统中,包括Mac OS X系统中,文件结束符输入时用Ctrl+D。
1.4.4 if语句
#include <iostream>int main()
{int currVal = 0, val = 0;if (std::cin >> currVal) {int cnt = 1;while (std::cin >> val) {if (val == currVal) {++cnt;} else {std::cout << currVal << " occurs " << cnt << " times" << std::endl;currVal = val;cnt = 1;}}std::cout << currVal << " occurs " << cnt << " times " << std::endl;}return 0;
}
1.5 类简介
头文件后缀:.h、.H、.hpp、.hxx。标准库头文件不带后缀。
1.5.1 Sales_item类
类Sales_item的作者定义了类对象可以执行的所有动作。
一、读写Sales_item
#include <iostream>
#include "Sales_item.h"
// 用尖括号(<>)包围标准库头文件,用双引号("")包围不属于标准库的头文件int main()
{Sales_item book;std::cin >> book;std::cout << book << std::endl;return 0;
}
二、Sales_item对象的加法
#include <iostream>
#include "Sales_item.h"int main()
{Sales_item item1, item2;std::cin >> item1 >> item2;std::cout << item1 + item2 << std::endl;return 0;
}
使用文件重定向:允许我们将标准输入和标准输出与命名文件关联起来
$ addItems <infile> outfile
假定$是操作系统提示符,我们的加法程序已经编译为名为addItems.exe的可执行文件,则上述命令会从一个名为infile的文件读取销售记录,并将输出结果写入到一个名为outfile的文件中,两个文件都位于当前目录
1.5.2 初识成员函数
#include <iostream>
#include "Sales_item.h"int main()
{Sales_item item1, item2;std::cin >> item1 >> item2;if (item1.isbn() == item2.isbn()) {std::cout << item1 + item2 << std::endl;return 0; // 表示成功} else {std::cerr << "Data must refer to same ISBN" << std::endl;return -1; // 表示失败}
}
一、什么是成员函数?
成员函数是定义为类的一部分的函数,有时也被称为方法。
1.6 书店程序
#include <iostream>
#include "Sales_item.h"int main()
{Sales_item total;if (std::cin >> total) {Sales_item trans;while (std::cin >> trans) {if (total.isbn() == trans.isbn()) {total += trans;} else {std::cout << total << std::endl;total = trans;}}std::cout << total << std::endl;} else {std::cerr << "No data?!" << std::endl;return -1;}return 0;
}
小结
本章介绍了足够多的C++语言的知识,以使你能够编译、运行简单的C++程序。我们看到了如何定义一个main函数,它是操作系统执行你的程序的调用入口。我们还看到了如何定义变量,如何进行输入输出,以及编写if、for和while语句。本章最后介绍了C++中最基本的特性——类。在本章中,我们看到了,对于其他人定义的一个类,我们应该如何创建、使用其对象。在后续章节中,我们将介绍如何定义自己的类。
术语
1、缓冲区:一个存储区域,用于保存数据。IO设施通常将输入(或输出)数据保存在一个缓冲区中,读写缓冲区的动作与程序中的动作是无关的。我们可以显示地刷新输出缓冲,以便强制将缓冲区中的数据写入输出设备。默认情况下,读cin会刷新cout;程序非正常终止时也会刷新cout。
2、表达式:最小的计算单元。表达式求值会产生一个结果。
3、操纵符对象:如std::endl,在读写流的时候用来“操纵”流本身。
相关文章:

C++ Primer 第1章 开始
C Primer 第1章 开始 1.1 编写一个简单的C程序1.1.1 编译、运行程序一、程序源文件命名约定二、从命令行运行编译器 练习 1.2 初识输入输出一、标准输入输出对象二、一个使用IO库的程序三、向流写入数据四、使用标准库中的名字五、从流读取数据六、完成程序 1.3 注释简介一、C中…...

【STM32 学习】电源解析(VCC、VDD、VREF+、VBAT)
VCC电源电压GND电源供电负电压(通常接地)VDD模块工作正电压VSS模块工作负电压VREFADC参考正电压VREF-ADC参考负电压VBAT电池或其他电源供电VDDA模拟供电正电压VSSA模拟供电负电压 一、VCC(供电电压) VCC是指芯片的电源电压&#…...

C语言实例_解析GPS源数据
一、GPS数据格式介绍 GPS(全球定位系统)数据格式常见的是NMEA 0183格式,NMEA 0183格式是一种用于导航设备间传输数据的标准格式,定义了一套规范,使得不同厂商的设备可以通过串行通信接口(常见的是RS-232&a…...

LVS+Keepalived
Keepalived概述: keepalived软件 就是通过vrrp协议实现高可用功能 vrrp通信原理: vrrp就是虚拟路由冗余协议,它的出现就是为了解决静态路由的单点故障vrrp是通过一种竞选的一种协议机制将路由交给某台vrrp路由器vrrp用ip多播的方式【多播地…...

uni-app根据经纬度逆解析详细地址
uni-app中的getLocation()方法可以获取到用户当前的地理位置(经纬度)、速度。 但是返回参数中的address在app中才会显示,小程序中不会显示,所以我们需要进行逆解析其地址,解析出它的地址信息。 1.首先要在腾讯位置服务…...

【数据结构】吃透单链表!!!(详细解析~)
目录 前言:一.顺序表的缺陷 && 介绍链表1.顺序表的缺陷2.介绍链表(1)链表的概念(2)链表的结构(3)链表的功能 二.单链表的实现1.创建节点的结构2.头文件函数的声明3.函数的实现ÿ…...

Linux 安全技术和防火墙
目录 1 安全技术 2 防火墙 2.1 防火墙的分类 2.1.1 包过滤防火墙 2.1.2 应用层防火墙 3 Linux 防火墙的基本认识 3.1 iptables & netfilter 3.2 四表五链 4 iptables 4.2 数据包的常见控制类型 4.3 实际操作 4.3.1 加新的防火墙规则 4.3.2 查看规则表 4.3.…...

Mac 开发 Tang Nano FPGA 指南(使用终端和使用 VS Code 和插件,适用所有 Gowin FPGA)
最近收到了一个 Tang nano 9K FPGA开发板,就想借此机会研究一下。 官方文档里介绍如果想使用高云的 FPGA,就需要使用 GOWIN IDE,但是需要申请 license 提交一堆资料,我是别人送的就不太方便让别人弄。加上 IDE 其实并不是很适合学…...

基于深度学习的铁路异物侵限检测算法研究_整体认知感觉欠点意思,但是有一个新的变形卷积-Octave 卷积
相比于其他的交通运输方式,铁路运输具有准时性高、连续性强、速度快、运输量大、运输成本低以及安全可靠等优点。同时由于国家高速铁路网络建设的不断推进,铁路运输逐渐成为我国客运与货运的主要运输方式。虽然铁路运输为人们出行和货物运输带来的极大的…...

Spring项目使用Redis限制用户登录失败的次数以及暂时锁定用户登录权限
文章目录 背景环境代码实现0. 项目结构图(供参考)1. 数据库中的表(供参考)2. 依赖(pom.xml)3. 配置文件(application.yml)4. 配置文件(application-dev.yml)5…...

2023.8 - java - 变量类型
在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: type identifier [ value][, identifier [ value] ...] ; 格式说明: type -- 数据类型。identifier -- 是变量名,可以使用逗号 , 隔开来声明多个同类型变量…...

【Kubernetes】Kubernetes的Pod控制器
Pod控制器 一、Pod 控制器的概念1. Pod 控制器及其功用2. Pod 控制器有多种类型2.1 ReplicaSet2.2 Deployment2.3 DaemonSet2.4 StatefulSet2.5 Job2.6 Cronjob 3. Pod 与控制器之间的关系 二、Pod 控制器的使用1. Deployment2. SatefulSet2.1 为什么要有headless?2…...

Ubuntu20.04安装Nvidia显卡驱动教程
1、禁用nouveau 1、创建文件,如果没有下载vim编辑器,将vim换成gedit即可 $ sudo vim /etc/modprobe.d/blacklist-nouveau.conf 2、在文件中插入以下内容,将nouveau加入黑名单,默认不开启 blacklist nouveau options nouveau m…...

视频汇聚/视频云存储/视频监控管理平台EasyCVR添加萤石云设备详细操作来啦!
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

AI 绘画Stable Diffusion 研究(十二)SD数字人制作工具SadTlaker插件安装教程
免责声明: 本案例所用安装包免费提供,无任何盈利目的。 大家好,我是风雨无阻。 想必大家经常看到,无论是在产品营销还是品牌推广时,很多人经常以数字人的方式来为自己创造财富。而市面上的数字人收费都比较昂贵,少则几…...

数据结构——链表详解
链表 文章目录 链表前言认识链表单链表结构图带头单循环链表结构图双向循环链表结构图带头双向循环链表结构图 链表特点 链表实现(带头双向循环链表实现)链表结构体(1) 新建头节点(2) 建立新节点(3)尾部插入节点(4)删除节点(5)头部插入节点(6) 头删节点(7) 寻找节点(8) pos位置…...

(学习笔记-进程管理)什么是悲观锁、乐观锁?
互斥锁与自旋锁 最底层的两种就是 [互斥锁和自旋锁],有很多高级的锁都是基于它们实现的。可以认为它们是各种锁的地基,所以我们必须清楚它们之间的区别和应用。 加锁的目的就是保证共享资源在任意时间内,只有一个线程访问,这样就…...

actuator/prometheus使用pushgateway上传jvm监控数据
场景 准备 prometheus已经部署pushgateway服务,访问{pushgateway.server:9091}可以看到面板 实现 基于springboot引入支持组件,版本可以 <!--监控检查--><dependency><groupId>org.springframework.boot</groupId><artifa…...

Linux设置临时目录路径的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

19-普通组件的注册使用
普通组件的注册使用-局部注册 一. 组件注册的两种方式:1.局部注册:只能在注册的组件内使用 (1) 创建 vue 文件(单文件组件) (2) 在使用的组件内导入,并注册 components:{ 组件名: 组件对象 } // 导入需要注册的组件 import 组件对象 from.vue文件路径 import HmHeader from ./…...

Java基础篇:抽象类与接口
1、抽象类和接口的定义: (1)抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类。 (2)接口是抽象方法的集合,声明了一系列的方法…...

面对对象编程范式
本文是阅读《设计模式之美》的总结和心得,跳过了书中对面试和工作用处不大或不多的知识点,总结总共分为三章,分别是面对对象编程范式、设计原则和设计模式 现如今,编程范式存在三种,它们分别是面向对象编程、面向过程编…...

“深度学习”学习日记:Tensorflow实现VGG每一个卷积层的可视化
2023.8.19 深度学习的卷积对于初学者是非常抽象,当时在入门学习的时候直接劝退一大班人,还好我坚持了下来。可视化时用到的图片(我们学校的一角!!!)以下展示了一个卷积和一次Relu的变化 作者使…...

146. LRU 缓存
题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否…...

Unity框架学习--场景切换管理器
活动场景 用脚本实例化的游戏对象都会生成在活动场景中。 哪个场景是活动场景,则当前的天空盒就会使用该场景的天空盒。 只能有一个场景是活动场景。 在Hierarchy右击一个场景,点击“Set Active Scene”可以手动把这个场景设置为活动场景。也可以使用…...

Kotlin Lambda和高阶函数
Lambda和高阶函数 本文链接: 文章目录 Lambda和高阶函数 lambda输出(返回类型)深入探究泛型 inline原理探究 高阶函数集合、泛型自己实现Kotlin内置函数 扩展函数原理companion object 原理 > 静态内部类函数式编程 lambda 1、lambda的由…...

ELKstack-Elasticsearch配置与使用
一. 部署前准备 最小化安装 Centos 7.x/Ubuntu x86_64 操作系统的虚拟机,vcpu 2,内存 4G 或更多, 操作系统盘 50G,主机名设置规则为 es-server-nodeX , 额外添加一块单独的数据磁盘 大小为 50G 并格式化挂载到/data/e…...

Kotlin 基础教程二
constructor 构造器一般情况下可以简化为主构造器 即: class A constructor(参数) : 父类 (参数) 也可以在构造器上直接声明属性constructor ( var name) 这样可以全局访问 init { } 将和成员变量一起初始化 susped 挂起 data class 可以简化一些bean类 比如get / set ,自动…...

K8S deployment挂载
挂载到emptyDir 挂载在如下目录,此目录是pod所在的node节点主机的目录,此目录下的data即对应容器里的/usr/share/nginx/html,实现目录挂载;图1红框里的号对应docker 的name中的编号,如下俩个图 apiVersion: apps/v1 k…...

类之间的比较
作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 类之间的比较 固定需求式比较器 固定需求式 通过…...