C++ Primer 第1章 开始

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,在读写流的时候用来“操纵”流本身。

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

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

相关文章

SpringSecurity原理

最近在研究SpringSecurity&#xff0c;肝了好多天&#xff0c;算是有点收获&#xff0c;在这里分享下 SpringSecurity是什么&#xff1f; SpringSecurity是一个强大的可高度定制的认证和授权框架&#xff0c;对于Spring应用来说它是一套Web安全标准。SpringSecurity注重于为J…

nginx-location正则

一 Nginx的location语法 location [||*|^~] /uri/ { … } 严格匹配。如果请求匹配这个location&#xff0c;那么将停止搜索并立即处理此请求~ 区分大小写匹配(可用正则表达式)~* 不区分大小写匹配(可用正则表达式)!~ 区分大小写不匹配!~* 不区分大小写不匹配^~ 如果把这个前缀…

word文件怎么免费转换为pdf格式?

大家在编辑word文件的时候&#xff0c;可能需要进行格式的转换&#xff0c;比如将word转换为pdf格式这时候需要使用工具软件。接下来小编就给大家介绍word文件怎么免费转换为pdf格式&#xff0c;免费word转pdf格式的方法。 免费word转pdf格式的方法 我们需要在电脑中安装并打开…

SpringCloud学习笔记(三)_服务提供者集群与服务发现Discovery

服务提供者集群 既然SpringCloud的是微服务结构&#xff0c;那么对于同一种服务&#xff0c;当然不可能只有一个节点&#xff0c;需要部署多个节点 架构图如下&#xff1a; 由上可以看出存在多个同一种服务提供者&#xff08;Service Provider&#xff09; 搭建服务提供者集…

第 7 章 排序算法(5)(希尔排序)

7.8希尔排序 7.8.1简单插入排序存在的问题 我们看简单的插入排序可能存在的问题. 数组 arr {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是&#xff1a; {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5,6} {1,2,3,4,5,6} 结论: 当需要插入的数…

Spring Boot整合RabbitMQ之发布与订阅模式

RabbitMQ的模式中&#xff0c;常用的模式有&#xff1a;简单模式&#xff0c;发布与订阅模式&#xff0c;工作模式&#xff0c;路由模式&#xff0c;主题模式。简单模式不太会运用到工作中&#xff0c;我们可以使用 RabbitMQ 的发布订阅模式&#xff0c;实现&#xff1a; 用户…

Go语言进阶:函数、指针、错误处理

一、函数 函数是基本的代码块&#xff0c;用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能&#xff0c;逻辑上每个函数执行的是指定的任务。 函数声明包括函数名﹑形式参数列表﹑返回值列表&#xff08;可省略&#xff09;以及函数体。 fun…

微信小程序教学系列(7)

第七章&#xff1a;小程序安全和权限管理 第一节&#xff1a;小程序安全性保障 在开发小程序时&#xff0c;我们要时刻牢记小程序的安全性。毕竟&#xff0c;我们可不希望我们的小程序被黑客入侵或者用户的隐私被泄露。所以&#xff0c;让我们一起来了解一下如何保障小程序的…

android cocoscreator 检测模拟器还是真机

转载至 一行代码帮你检测Android模拟器 具体原理看原博主文章&#xff0c;这里只讲cocoscreator3.6的安卓工程怎么使用 1.新建一个com.lahm.library包&#xff0c;和com.cocos.game同目录&#xff0c;如图示 那四个文件的代码如下&#xff1a; EmulatorCheckUtil类&#…

mysql、oracle、sqlserver常见方法区分

整理了包括字符串与日期互转、字符串与数字互转、多行合并为一行、拼接字段等一些常用的函数&#xff0c;当然有些功能实现的方法不止一种&#xff0c;这里列举了部分常用的&#xff0c;后续会持续补充。 MySQLOracleSQL Server字符串转数字 CAST(123 as SIGNED) 或 CONVERT(12…

http请求中 Content-Type 的类别有哪些?

HTTP请求中的Content-Type字段用于指定请求体的格式类型。常见的Content-Type类型有以下几种&#xff1a; application/x-www-form-urlencoded&#xff1a;这是默认的格式&#xff0c;用于简单的表单数据传输。在发送表单数据时&#xff0c;如果使用GET方法&#xff0c;则需要…

【Unity】制作一个简单的菜单栏页面并实现其功能

这是一个简单的菜单页面制作&#xff0c;接下来我们将制作一个完整的菜单页面&#xff0c;并且通过一定的代码去实现它对应的效果。这个主要的功能就是我们在游戏中如果想暂停一下或者重新开始&#xff0c;那么就要用到我们这个功能。接下来我们将实现在游戏中按ESC退出键可以调…

Linux Kernel的local_irq_enable()和local_irq_disable()函数

代码如下图所示&#xff0c;最终操作的是msr daifset, #3 和 msr daifclr, #3 寄存器。 (include/linux/irqflags.h) #define local_irq_enable() do { raw_local_irq_enable(); } while (0) #define local_irq_disable() do { raw_local_irq_disable(); } while (0)#define ra…

解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题

如果使用SES调试NRF52840的时候发现&#xff0c;官方例程只能显示CPU寄存器&#xff0c;但是无法显示外设寄存器时&#xff0c;解决办法如下&#xff1a; 1.在解决方案右键→Options→Debug→Debugger&#xff0c;然后Target Device选择正确的型号。 2.Register Definition Fil…

10个最好的云GPU服务

随着深度学习、人工智能和机器学习等新技术的出现&#xff0c;云 GPU 的需求量很大。 GPU&#xff08;图形处理单元&#xff09;是专用处理器&#xff0c;用于处理计算机图形和游戏等活动所需的大量数据集和复杂计算。不过&#xff0c;它们现在对人工智能&#xff08;A.I.&…

【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

文章目录 一、命名空间 namespace1、命名空间基本概念2、名称概念4、C 语言的命名空间3、命名空间避免标识符冲突 二、命名空间定义1、命名空间基本概念2、命名空间定义语法3、代码示例 - 命名空间定义使用 三、命名空间使用1、命名空间默认访问方式2、使用命名空间3、使用默认…

实战项目ssm权限系统 3-总结篇,权限模块保护业务模块

一 工程模块介绍 1.1 工程模块关系 在业务微服务模块中引入安全认证模块&#xff0c;起到对业务模块的认证授权保护

链路聚合详解

链路聚合详解 华为交换机链路聚合&#xff1a;Linux链路聚合bond配置 华为交换机链路聚合&#xff1a; 方式一&#xff1a;配置手工负载分担方式的链路聚合 [CORE1] interface Eth-Trunk 1 [CORE1-Eth-Trunk1] trunkport GigabitEthernet 0/0/5 to 0/0/6 [CORE1-Eth-Trunk1] p…

在线设计APP ui的网站,分享这7款

在数字时代&#xff0c;用户界面&#xff08;UI&#xff09;设计变得非常重要&#xff0c;因为良好的UI设计可以改善用户体验&#xff0c;增强产品吸引力。随着科学技术的发展&#xff0c;越来越多的应用在线设计网站出现&#xff0c;为设计师和团队提供了一种新的创作方式。本…

postgresql基于postgis常用空间函数

1、ST_AsGeoJSON 图元转geojson格式 select ST_AsGeoJSON(l.geom) from g_zd l limit 10 2、 ST_Transform 坐标转换 select st_transform(l.shape, 3857) from sde_wf_cyyq l limit 10select st_astext(st_transform(l.shape, 3857)) from sde_wf_cyyq l limit 103、st_aste…