【第2章 开始学习C++】进入C++

news2024/11/16 0:57:00

文章目录

  • 导语
  • C语言输入和输出
  • main( )函数
  • 作为接口的函数头
  • C++预处理器和iostream文件
  • 头文件名
  • 名称空间
  • 使用 cout 进行 C++ 输出
  • 控制符 endl

导语

首先介绍一个显示消息的简单C++程序。

  • 源代码中包含一些供读者阅读的注释, 这些注释都以 // 打头, 编译器将忽略它们。
  • C++ 对大小写敏感, 也就是说区分大写字符和小写字符。 该程序使用的是 cout, 如果将其替换为CoutCOUT, 程序将无法通过编译, 并且编译器将指出使用了未知的标识符(编译器也是对拼写敏感的, 因此请不要使用 koutcoot) 。
  • 文件扩展名 cpp 是一种表示 C++ 程序的常用方式。

C语言输入和输出

如果已经使用过 C 语言进行编程, 则看到 cout 函数(而不是 printf() 函数) 时可能会小吃一
惊。

事实上, C++ 能够使用 printf()、 scanf() 和其他所有标准 C 输入和输出函数, 只需要包含常
规 C 语言的 stdio.h 文件。

main( )函数

去掉修饰后,main 函数的基本结构:
在这里插入图片描述
表明有一个名为 main() 的函数, 并描述了该函数的行为。

这几行代码构成了函数定义(function definition) 。 该定义由两部分组成: 第一行 int main( ) 叫函数头(function heading) , 花括号({和})中包括的部分叫函数体。

在 C++ 中, 每条完整的指令都称为语句。 所有的语句都以分号结束。
在这里插入图片描述
main( )中最后一条语句叫做返回语句(return statement) , 它结束该函数。

作为接口的函数头

C++ 句法要求 main( ) 函数的定义以函数头 int main( ) 开始。

函数头表明 main( ) 函数可以给调用它的函数返回一个整数值, 且不从调用它的函数那里获得任何信息。

C++ 函数可被其他函数激活或调用, 函数头描述了函数与调用它的函数之间的接口。 位于函数名前面的部分叫做函数返回类型, 它描述的是从函数返回给调用它的函数的信息。 函数名后括号中的部分叫做形参列表(argument list) 或参数列表(parameter list) ; 它描述的是从调用函数传递给被调用的函数的信息。

main() 被启动代码调用, 而启动代码是由编译器添加到程序中的, 是程序和操作系统(UNIX、 Windows 7或其他操作系统)之间的桥梁。

C++程序必须包含一个名为 main() 的函数( 不是Main( )、MAIN( )或mane( )。

C++预处理器和iostream文件

如果程序要使用 C++ 输入或输出工具, 需要提供这样两行代码:

在这里插入图片描述
C++和C一样, 也使用一个预处理器。它处理名称以 # 开头的编译指令。不必执行任何特殊的操作来调用该预处理器, 它会在编译程序时自动运行。

#include 编译指令:预处理器将 iostream 文件的内容添加到程序中。 这是一种典型的预处理器操作: 在源代码被编译之前, 替换或添加文本。

#include 编译指令导致 iostream 文件的内容随源代码文件的内容一起被发送给编译器。 实际上, iostream 文件的内容将取代程序中的代码行 #include 。 原始文件没有被修改, 而是将源代码文件和 iostream 组合成一个复合文件, 编译的下一阶段将使用该文件。

使用 cin 和 cout 进行输入和输出的程序必须包含文件 iostream。

头文件名

像 iostream 这样的文件叫做包含文件(include file) —由于它们被包含在其他文件中; 也叫头文件(header file) —由于它们被包含在文件起始处。 C++编译器自带了很多头文件, 每个头文件都支持一组特定的工具。

C 语言的传统是, 头文件使用扩展名 h, 将其作为一种通过名称标识文件类型的简单方式。 例如, 头文件 math.h 支持各种 C 语言数学函数, 但C++的用法变了。 现在, 对老式 C 的头文件保留了扩展名h(C++程序仍可以使用这种文件) , 而C++头文件则没有扩展名。 有些 C 头文件被转换为 C++头文件, 这些文件被重新命名, 去掉了扩展名 h(使之成为C++风格的名称) , 并在文件名称前面加上前缀c(表明来自C语言) 。

名称空间

如果使用 iostream, 而不是 iostream.h, 则应使用下面的名称空间编译指令来使 iostream 中的定义对程序可用:

在这里插入图片描述
名称空间支持是一项 C++ 特性, 旨在让您编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易, 它还有助于组织程序。

一个潜在的问题是, 可能使用两个已封装好的产品, 而它们都包含一个名为wanda( )的函数。 这样, 使用wanda( )函数时, 编译器将不知道指的是哪个版本。 名称空间让厂商能够将其产品封装在一个叫做名称空间的单元中, 这样就可以用名称空间的名称来指出想使用哪个厂商的产品。 因此, Microflop Industries可以将其定义放到一个名为Microflop的名称空间中。 这样, 其wanda( )函数的全称为Microflop::wanda( ); 同样,Piscine公司的wanda( )版本可以表示为Piscine::wanda( )。 这样, 程序就可以使用名称空间来区分不同的版本了。

类、 函数和变量便是 C++ 编译器的标准组件, 它们现在都被放置在名称空间 std 中。

在 iostream 中定义的用于输出的 cout 变量实际上是 std::cout, 而 endl 实际上是 std::endl。 因此, 可以省略编译指令 using, 以下述方式进行编码:

在这里插入图片描述
using 编译指令使得 std 名称空间中的所有名称都可用。 这是一种偷懒的做法, 更好的方法是, 只使所需的名称可用, 这可以通过使用 using 声明来实现:

在这里插入图片描述
用这些编译指令替换 using namespace std; 后, 便可以使用 cin 和 cout, 而不必加上 std::前缀。

使用 cout 进行 C++ 输出

在这里插入图片描述
在 C++中, 用双引号括起的一系列字符叫做字符串。<< 符号表示该语句将把这个字符串发送给 cout。

cout 是什么呢? 它是一个预定义的对象, 知道如何显示字符串、 数字和单个字符等。

从概念上看, 输出是一个流, 即从程序流出的一系列字符。 cout 对象表示这种流, 其属性是在iostream文件中定义的。 cout 的对象属性包括一个插入运算符(<<) , 它可以将其右侧的信息插入到流中。

插入运算符(<<) 看上去就像按位左移。这是一个运算符重载的例子,通过重载, 同一个运算符将有不同的含义。 编译器通过上下文来确定运算符的含义。 & 符号既表示地址运算符, 又表示按位AND 运算符; * 既表示乘法, 又表示对指针解除引用。

控制符 endl

对于 cout 来说有特殊含义的特殊符号被称为控制符( manipulator)。

在这里插入图片描述

endl 是一个特殊的 C++ 符号, 表示一个重要的概念: 重起一行。 endl 也是在头文件 iostream 中定义的, 且位于名称空间 std 中。

C++ 还提供了另一种在输出中指示换行的旧式方法: C 语言符号 \n:

在这里插入图片描述\n 被视为一个字符, 名为换行符。

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

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

相关文章

patroni高可用测试

pkill postgres 主库日志 2024-09-25 16:42:30,579 INFO: no action. I am (postgres-1a86e6d5-0-0), the leader with the lock 2024-09-25 16:42:40,577 INFO: no action. I am (postgres-1a86e6d5-0-0), the leader with the lock 2024-09-25 16:42:50,578 INFO: no action…

Linux基础之文件系统

一、磁盘结构的认识 首先我们能认识到的一点是&#xff1a;不是所有的文件都被打开的&#xff01; 大部分文件都不是被打开的&#xff08;当前并不需要被访问&#xff09;&#xff0c;都在磁盘中进行保存。那么没有被&#xff08;进程&#xff09;打开的文件&#xff0c;要不要…

Python 中什么是 Mock 对象?如何在测试中使用

Python 中什么是 Mock 对象&#xff1f;如何在测试中使用 在软件开发中&#xff0c;测试是确保代码质量的重要环节。尤其是在编写单元测试时&#xff0c;测试的准确性和可靠性至关重要。为了确保测试的有效性&#xff0c;开发者通常会使用 Mock 对象。本文将详细介绍 Mock 对象…

深度学习基础案例7--马铃薯病识别,对VGG16进行轻量级优化,计算量减少了99%,但是准确率下降4%

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 本来想继续优化的&#xff0c;但是我看论文和查阅一些资料&#xff0c;涉及到了知识蒸馏、量化的知识&#xff0c;这些知识我需要花一点时间去研究一下&…

4. 数据结构: 对象和数组

数字、布尔值和字符串是构建数据结构的原子。不过&#xff0c;许多类型的信息需要不止一个原子。对象允许我们对值&#xff08;包括其他对象&#xff09;进行分组&#xff0c;从而构建更复杂的结构。到目前为止&#xff0c;我们所构建的程序都受到限制&#xff0c;因为它们只能…

MyBatis 入门教程-搭建入门工程

Maven作为一个优秀的项目构建和管理工具,在日常的开发中被大多数开发者使用,后续的项目也是基于Maven来构建。 创建一个Maven项目 利用IDEA创建项目工具来创建一个Maven项目 添加MyBatis的依赖 这里可以从Maven仓库地址中进行查看, https://mvnrepository.com/ 从这里可…

SUB1G无线通信模块赋能对讲机无线联网

一、模组介绍&#xff1a; ANS TKM-220是一款专为LPWAN物联网应用而研制的SUB1G无线模组&#xff0c;使用全新的TurMassTM 技术&#xff0c;具有超大容量 、高速率 、广覆盖和低成本的特点&#xff0c;处于国际领先水平 。 二、模组特点&#xff1a; ◉ 采用独创的TurMass™…

Oracle 19c 使用EMCC 监控当前所有数据库

一.EMCC简介 EMCC&#xff0c;全称Oracle Enterprise Manager Cloud Control&#xff0c;是Oracle提供的一套集中化监控工具&#xff0c;可以对数据库、操作系统、中间件等进行监控&#xff0c;通过OMS&#xff08;Oracle Management Service&#xff09;收集监控数据并将监控信…

Golang | Leetcode Golang题解之第421题数组中两个数的最大异或值

题目&#xff1a; 题解&#xff1a; const highBit 30type trie struct {left, right *trie }func (t *trie) add(num int) {cur : tfor i : highBit; i > 0; i-- {bit : num >> i & 1if bit 0 {if cur.left nil {cur.left &trie{}}cur cur.left} else …

C# 数据校验与控件绑定

在上一篇中&#xff0c;写了使用特性对一个对象的值进行校验&#xff1b;虽然代码比较简单&#xff0c;但依然不是最优解&#xff0c;在做数据新增校验的时候&#xff0c;倒也没什么问题&#xff0c;毕竟这是WinForm&#xff1b;但是如果是做数据编辑&#xff0c;代码就会变得更…

遗忘的数学(拉格朗日乘子法、牛顿法)

目录 拉格朗日乘子法定理 证明&#xff1a;​编辑 应用条件与符号选择 雅可比矩阵 黑塞矩阵 牛顿法 解方程的根的牛顿法 解方程组的根的牛顿法 数值优化的牛顿法&#xff08;求最值&#xff09; 拉格朗日乘子法定理 证明&#xff1a; dSi这一段没看懂…… 应用…

“AI+Security”系列第3期(四):360安全大模型业务实践

近日&#xff0c;由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办的“AI Security”系列第 3 期技术沙龙&#xff1a;“AI 安全智能体&#xff0c;重塑安全团队工作范式”活动顺利举行。此次活动吸引了线上线下超过千名观众参与。 活动中&…

C++——关联式容器(5):哈希表

7.哈希表 7.1 哈希表引入 哈希表的出现依旧是为了查找方便而设计的。在顺序结构中&#xff0c;查询一个值需要一一比较&#xff0c;复杂度为O(N)&#xff1b;在平衡树中&#xff0c;查询变为了二分查找&#xff0c;复杂度为O(logN)&#xff1b;而对于哈希表&#xff0c;我们可…

BST-二叉搜索树

前言 从图的角度出发&#xff0c;树是一种特殊的图。图的大多数算法&#xff0c;树都可以适用。对树操作中&#xff0c;你可以发现有关图算法思想的体现。 不过&#xff0c; 本篇不是完全从图的角度解读树&#xff0c; 重点在初学者视角&#xff08;一般学习数据结构顺序是从树…

码点和码元的区别--Unicode标准的【码点】和【码元】

Unicode是通用字符编码标准是计算机科学领域里的一项业界标准&#xff0c;包括字符集、编码方案等。 Unicode标准定义了一个统一的多语言文本字符集&#xff08;即Unicode字符集&#xff09;。 Unicode标准定义了三种字符编码方案&#xff1a;UTF-8、UTF-16、UTF-32。 因此&…

【Java面向对象高级06】static的应用知识:代码块

文章目录 前言一、代码块概述二、代码块分2种 1、静态代码块2、实例代码块总结 前言 记录static的应用知识&#xff1a;代码块 一、代码块概述 代码块是类的5大成分之一&#xff08;成员变量&#xff0c;构造器&#xff0c;方法&#xff0c;代码块&#xff0c;内部类&#xf…

「Python教程」vscode的安装和python插件下载

粗浅之言&#xff0c;如有错误&#xff0c;欢迎指正 文章目录 前言Python安装VSCode介绍VSCode下载安装安装python插件 前言 Python目前的主流编辑器有多个&#xff0c;例如 Sublime Text、VSCode、Pycharm、IDLE(安装python时自带的) 等。个人认为 vscode 虽然在大型项目上有…

一个好用的MP3音乐下载网,我推荐给你(免费)

点击访问->https://www.gequbao.com/ 或用Bing搜索歌曲宝即可。 主页面长这样子~ 以最近大火的悲鸣海为例&#xff0c;搜索&#xff1b; 以第一个为例&#xff0c;点击&#xff1b; 它既支持下载.mp3格式的音乐文件&#xff0c;还支持下载.lrc的歌词文件。 非常好用&…

使用ChatGPT引导批判性思维,提升论文的逻辑与说服力的全过程

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 批判性分析&#xff08;Critical Analysis&#xff09; 是论文写作中提升质量和说服力的重要工具。它不仅帮助作者深入理解和评价已有研究&#xff0c;还能指导作者在构建自己论点时更加…

网络工程师学习笔记——网络互连与互联网(三)

TCP三次握手 建立TCP连接是通过三次握手实现的&#xff0c;采用三报文握手主要是为了防止已失效的连接请求报文突然又传送到了&#xff0c;因而产生错误 主动发起TCP连接建立的称为客户端 被动等待的为TCP服务器&#xff0c;二者之间需要交换三个TCP报文段 首先是客户端主动…