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

文章目录

导语

首先介绍一个显示消息的简单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 被视为一个字符, 名为换行符。

相关推荐
徐浪老师1 小时前
深入解析贪心算法及其应用实例
算法·贪心算法
软行1 小时前
LeetCode 单调栈 下一个更大元素 I
c语言·数据结构·算法·leetcode
钰爱&2 小时前
【操作系统】Linux之线程同步二(头歌作业)
linux·运维·算法
Ws_2 小时前
leetcode LCR 068 搜索插入位置
数据结构·python·算法·leetcode
灼华十一2 小时前
数据结构-布隆过滤器和可逆布隆过滤器
数据结构·算法·golang
adam_life4 小时前
OpenJudge_ 简单英文题_04:0/1 Knapsack
算法·动态规划
捕鲸叉5 小时前
怎样在软件设计中选择使用GOF设计模式
c++·设计模式
捕鲸叉5 小时前
C++设计模式和编程框架两种设计元素的比较与相互关系
开发语言·c++·设计模式
龙的爹23335 小时前
论文翻译 | The Capacity for Moral Self-Correction in Large Language Models
人工智能·深度学习·算法·机器学习·语言模型·自然语言处理·prompt
鸣弦artha5 小时前
蓝桥杯——杨辉三角
java·算法·蓝桥杯·eclipse