c++教程(二:Structure of a program)

来源:互联网 发布:windows命令行设置ip 编辑:程序博客网 时间:2024/06/05 18:48

————————————————————————

该系列教程为翻译c++官方教程,点击参考英文原版,水平有限,翻译不通之处敬请谅解!

————————————————————————

工程结构

学习编程语言的最好方法是编写工程。一般的第一个工程都是打印“Hello world”,也就是打印“Hello world”到你的计算机屏幕上,虽然非常简单,但是也包含着C++工程该有的基本部分:

// my first program in C++#include <iostream>int main(){  std::cout << "Hello World!";}
Hello World!

上边是c++代码,下边是这个工程在电脑上运行的显示结果。左边的灰色数字是显示代码的行数,这样便于对工程进行讨论调试容易发现错误在哪里,这些数字并不是工程的一部分。

现在我们来一行一行的结束这个工程:

第一行:// my first program in C++

使用两斜线表明,该行的其余部分是由程序员对程序的解释说明,对整个工程没有任何影响。程序员使用它们包括对有关代码或程序进行简短解释。在这种情况下,它是该工程的一个简短介绍说明。

第二行: #include

该行开始使用哈希符号井号(#)是对指令读取和所谓的预处理器解释。他们在程序开始之前需要特殊引用的。在这种情况下,指令#include,指示着预处理器包括了标准的C++代码段,这也被称为头文件iostream,即允许执行标准输入输出操作,如写让这个程序输出(Hello World )到屏幕上。

第三行:空白行

该行没有任何作用,只是简单的有利于提高代码的可读性;

第四行:int main ()

该行声明函数的开始,本质上,一个函数声明拥有一个名字包含着一组代码,而在这里,函数的名字是main,调试包含着下面的代码。函数将会在后续章节讨论到,本质上,他们是通过引入一个类型(int)、一个名字(main),以及一对括号(),可以包括可选参数。

第五、七行:双{}

第五行的{是预示着main函数的开始,第7行}预示着main函数的结束。这两者之间的所有代码是这个函数的主体部分,说明了函数被调用时的功能。所有的函数都有这样一对大括号来定义着他们的开始于结束。

第六行 std::cout << “Hello World!”;

这一行是c++代码声明,一个声明就可以产生一些实际效果,也就是说它是构成程序的肉体,或者说实际起作用的部分。这种声明代码在函数中就按照一样的顺序执行。

那么这一行代码有3个部分,首先stu::cout,这表明这标识符的输出(一般来说就是计算机的屏幕),第二就是插入运算符(<<),表明后面的部分是跟在stu::cout之后的,最后是一段标语句子(“Hello world”),也就是把内容插入到标准输出中。

注意到这段代码之后是有一个分号(;),这标志着这段代码声明的结束,就像由于句子的结束一样。所有的C++代码必须有一个分号结束符,c++里面一直最为典型的错误就是在代码结束后遗漏了分号结束符。

你可能已经注意到,该段程序在执行时,并不是所有的代码都在表现着作用。有一个包含注释(以//开头)的行。有与预处理器(以#开头)指令线。有定义的函数(在这里是main函数)的线。最后,有以分号(插入到COUT)结尾的语句,就是在主函数括号({})的部分。

这些代码写在不同的行上面只是为了我们能够方便的理解它,c++对于程序如何写,写在哪里是没有明确的规定的。比如说这一段代码:

int main(){  std::cout << "Hello World!";}

我们可以还这么写:

int main () { std::cout << "Hello World!";}

把所有的都写在一行上,表示的意思与上面的那个完全一样。

在C++中,不同语句之间的用分号符(;)来划分,这么做的目的并不是为了分离开来不同行的代码,许多代码语句可以写在一行,或者每个语句可以写在自己的那一行上。写成不同行的只是为了使其更加清晰,让人们更加能够读懂它,但对程序的实际行为没有影响。

现在让我们在我们的工程文件中增加一行:

//my second program in C++#include <iostream>int main (){  std::cout << "Hello World! ";  std::cout << "I'm a C++ program";}

得到结果:

Hello World! I'm a C++ program

在这种情况下,程序对两个语句进行了两次插入 std::cout,同样我们也可以把这两个语句卸写在一行,这样main函数就变成了下面这样子:

int main () { std::cout << " Hello World! "; std::cout << " I'm a C++ program "; }

当然源码还可以被分离成更多的行,向下面这样:

int main (){  std::cout <<    "Hello World!";  std::cout    << "I'm a C++ program";}

所有的表示结果最开始的那个例子是一样的。

然而预处理指令(也就是开始的#)却不适合这个一般规则,因为它们不是函数主体语句。他们只是正确编译开始前的预处理程序。预处理指令必须在自己的行中指定,因为它们不是语句,不必以分号结束(;)。

注释

像前面说的,注释对于整个工程运行结果来说没有任何作用,然而,作为一个说明文档对于解释程序的含义以及它是如何运行是至关重要的。

C++提供两种方式的注释方案:
// line comment
/* block comment */

第一种,被称为行注释,从双斜线符号(//)起同一行后面的所有部分都被注释掉。第二个,称为块注释,丢弃//直接的首次出现的所有内容,通常这之间包括多行。

现在为我们的代码添加注释:

/* my second program in C++   with more comments */#include <iostream>int main (){  std::cout << "Hello World! ";     // prints Hello World!  std::cout << "I'm a C++ program"; // prints I'm a C++ program}

结果:

Hello World! I'm a C++ program

如果在一个工程中,需要注释的字符没有用//或者/**/来注释掉,编译器就认为他们是c++语句代码,极有可能导致编译失败,出现与一个或几个错误消息。

Using namespace std

如果你之前看过一些c++代码,你就会看到有时候会用cout代替std::cout,两者表示的一样。第一个使用的是他的不标准名字(cout),第二个标准写法是直接使用它的命名空间std(就是std::cout)

Cout是标准库的一部分,c++中的所有标准库元素都写在一个叫做std的命名空间中。

为了访问std命名空间标准库中的元素,而不是直接对每一个都需要写一下std(比如我们在cout前面加上前缀std::),或者是为了更清晰的看到组件来源。最一般的方法就是使用它的命名空间来声明一下:
Using namespace std;

这种声明可以使得std空间下的所有元素可以以一种非标准的方式使用(而不需要加上前缀std::)

基于此,最后一个例子可以写成:

// my second program in C++#include <iostream>using namespace std;int main (){  cout << "Hello World! ";  cout << "I'm a C++ program";}

结果:

Hello World! I'm a C++ program

访问std命名空间中的元素的方法(明确的引用和使用声明)都是是有效的,在C++中产生完全相同的效果。为了简化,并提高可读性,在这些教程中的例子将更经常使用后一种方法来使用声明,当然使用标准的声明方式是唯一的方式可以来保证名称冲突永远不会发生。

0 0