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

文章目录

  • 导语
  • 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.niftyadmin.cn/n/5683482.html

相关文章

安全测试必学神器 --BurpSuite 安装及使用实操

BurpSuite是一款功能强大的集成化安全测试工具&#xff0c;专门用于攻击和测试Web应用程序的安全性。适合安全测试、渗透测试和开发人员使用。本篇文章基于BurpSuite安装及常用实操做详解&#xff0c;如果你是一名安全测试初学者&#xff0c;会大有收获&#xff01; 一、BurpS…

【二十七】【QT开发应用】VS如何复制项目,QT无边窗窗口Pro版本,信号与信号槽的应用,背景图片自适应控件大小

VS复制项目 在使用VS的过程中,有的时候我们需要复制我们已经存在的项目. 我们可以先创建一个新的项目. 接着把需要复制的项目的文件复制粘贴到新的项目文件夹中. 不要忘记添加现有项目. CFrameLessWidgetBase.h #pragma once #include <QWidget> class CFrameLessWi…

【css】常见布局概述

本文将对css的常见布局方案进行概述&#xff0c;给大家提供系统化的布局解决方案参考。 一、流式布局 二、浮动布局 三、定位布局 四、弹性布局 五、网格布局 一、流式布局 顾名思义&#xff0c;该布局基于dom的文档流进行布局&#xff0c;是最常用、最原始的布局方式。 …

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL68

同步FIFO 描述 请设计带有空满信号的同步FIFO&#xff0c;FIFO的深度和宽度可配置。双口RAM的参考代码和接口信号已给出&#xff0c;请在答案中添加并例化此部分代码。 电路的接口如下图所示。端口说明如下表。 接口电路图如下&#xff1a; 双口RAM端口说明&#xff1a; 端口…

Python | 第七章 | 函数

P60 多重循环控制&#xff08;1&#xff09; 2024/8/30 一、基本介绍 将一个循环放在另一个循环体内&#xff0c;就形成了嵌套循环。其中&#xff0c;for ,while均可以作为外层循环和内层循环。【建议一般使用两层&#xff0c;最多不要超过3层&#xff0c;否则&#xff0c;代…

数据归组工具

利用C#将数据 [ {"name":"A","fzh":1}, {"name":"A","fzh":2}, {"name":"A","fzh":3}, {"name":"B","fzh":4}, {"name":"B",&…

Notion is all you need(文献管理利器)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;科研杂谈_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

不同类型RWA在智能合约开发中的差异

RWA&#xff08;现实世界资产&#xff09;的类型多样&#xff0c;从房地产、艺术品到股票、债券等&#xff0c;每种资产的特性、价值评估方式、监管要求等都存在差异。这些差异直接影响到智能合约的设计和开发。 1.房地产RWA 复杂性高&#xff1a; 房地产涉及到土地使用权、建…