C++入门很轻松(微课超值版)
上QQ阅读APP看书,第一时间看更新

2.2 C++程序的结构

微视频

C++程序中会包含头文件、命名空间、主函数、字符串常量、数据流等部分,这些都是C++程序中经常用到的。本节就来认识C++程序的结构。

2.2.1 第一个C++程序

开启神奇的C++学习之旅与学习其他语言程序一样,首先从一个简单的程序开始。

【实例2.1】编写程序(见第1.2.3节),在屏幕上输出Hello World!(源代码\ch02\2.1.txt)。

    #include <iostream>
    using namespace std;
    int main()
    {
        cout << "Hello World!\n";
    }

程序输出的结果如图2-1所示。

图2-1 例2.1的程序运行结果

以上是一段输出Hello World的小程序。程序代码的第1行使用字符“#”(这是一个预处理标志,预处理表示该行代码要最先进行处理,所以要在编译代码前运行)开头,include是一个预处理指令,其后紧跟一对尖括号(< >),尖括号内是一个标准库;第2行表示使用命名空间std;从第3行开始到第6行结束是程序部分,入口函数main()是每个C++程序都需要有的,大括号({ })代表main()函数的函数体,在函数体内可以编写要执行的代码。

☆大牛提醒☆

C++程序代码中所有的字母、数字、括号及标点符号均为英文输入法状态下的半角字符,而不能输入中文输入法状态下的全角字符。如图2-2所示,末尾即为中文输入法状态下的分号,当程序运行时就会给出相应的错误提示。

图2-2 中文输入法下分号的编译错误提示

2.2.2 #include指令

C++程序中第一行带“#”的语句被称为宏定义或预编译指令,表示包含C/C++标准输入头文件。C++编译系统会根据头文件名把该文件的内容包含进来。

☆大牛提醒☆

在该C++语句中不要用" "代替< >来包含系统头文件,例如,#include "stdio.h"和#include "iostream"都是错误的示例。

Hello World程序中的第一行代码#include <iostream>就是为了说明要引用iostream文件内容,编译器在编译程序时会将iostream中的内容在#include <iostream>处展开。如果在编写程序时忘记包含iostream头文件,就会出现错误提示。例如,在编写Hello World程序时忘记包含iostream头文件,那么原来应输出Hello World的程序在编译时就会报错,如图2-3所示。在该图中可以发现,由于不包含这个头文件,很多相关的功能都是不能使用的。

图2-3 忘记包含iostream头文件时的编译错误提示

2.2.3 iostream标准库

iostream(输入/输出流)是一个标准库。简单来讲,它的命名是由in和out的首字母与stream结合成的。它包含了众多的函数,每个函数都有其自身的作用。

提示:函数就是能够实现特定功能的程序模块。

如果在编写程序时没有包含iostream标准库文件,那么就不能使用cout输出语句了。因此,这里需要读者记住的是,必须使用#include <iostream>这条语句,才能在程序中使用与其相关的功能。

☆大牛提醒☆

如果在编程时忘记插入一对尖括号(< >)导致程序无法包含iostream文件,就会引起其他功能不能被使用,因此会出现如图2-4所示的错误提示。

图2-4 忘记插入尖括号时的编译错误提示

2.2.4 命名空间

C++中命名空间的目的是减少和避免命名冲突。所谓命名空间(namespace),是指标识符的各种可见范围。使用C++标准库中标识符的一种简便方法就是,在程序中添加如下语句。

    using namespace std;

像上述语句这样命名空间std内定义的所有标识符都有效,所以在程序中我们可以使用cout输出字符串;如果没有这条语句,就只能像下面这样来书写输出字符串语句了。

    std::cout << "Hello World!\n";

提示:“std::”是一个命名空间的标识符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以标准库中的函数或者对象都要用std来限定。

由于cout是我们经常用到的,因此在每个程序的开头加上一条“using namespace std;”是很有必要的。如果在输入“using namespace std;”时忘记添加分号,将会出现如图2-5所示的错误提示。

图2-5 忘记添加分号的编译错误提示

2.2.5 函数main()

函数main()是程序的入口点,C++程序必须有且只能有一个函数main(),而不论其在程序中处于什么样的位置。C++程序从函数main()的第一条指令开始执行,直到函数main()结束,整个程序也将执行结束。

☆大牛提醒☆

并非所有C++程序都有传统的函数main()。用C或C++写成的Windows程序入口点函数称为WinMain(),而不是传统的函数main()。

函数main()下面“{}”中的内容是需要执行的内容,称为函数体。函数体是按代码的先后顺序执行的,写在前面的代码先执行,写在后面的代码后执行。代码“cout << "Hello World!\n";”表示通过输出流输出字符串“Hello World!”,双引号("")代表括起来的单词是字符串常量,cout表示输出流,“<<”表示将字符串传送到输出流中。

函数的返回值是用来判断函数执行情况及返回函数执行结果的,因此,不要将函数main()的返回类型定义为void(虽然有些编译器允许用户将其定义为viod,但这样不符合C++的语法标准),也不要将函数main()的返回类型int省略不写。例如,void main(){}和main(){}都是错误的示例。

2.2.6 关于注释

在C++中,注释是用来辅助程序员阅读程序的语言结构。它是一种程序礼仪,可以用来概括程序的算法、表达变量的意义或者阐明一段比较难懂的程序代码。注释不会增加可执行程序代码的长度,在代码生成以前编译器会将注释从程序中剔除掉。

C++中有两种注释符号:一种是注释对(/* */),与C语言中的一样,注释的开始用/*标记,编译器会把/*与*/之间的代码当作注释;另一种是双斜线(//),用来注释一个单行,程序行中注释符右边的内容都将被当作注释而被编译器忽略。例如:

    /*Hello World.cpp*/
    #include <iostream>             //头文件引用
    using namespace std;            //命名空间
    int main()                      //主函数
    {
         cout << "Hello World!\n";  //执行输出字符串
    }