进入C++
main()函数
例:
int main () { statements return 0; }
这几行代码构成了函数定义
(function definition),该定义由两部分组成:
第一行int main()叫做函数头
(function hesding),花括号中包括的部分叫做函数体
。
函数头对函数和程序的其他部分之间的接口做了总结,函数体是指出函数应该做什么的计算机指令。每条完整的指令都成为语句,所有的语句都以分号结束。main()函数中的最后一条语句叫做返回语句
(return statement),它用来结束该函数。
函数名前面的部分叫做函数返回类型,它描述的是从函数函数给调用它的函数的信息。函数名后括号中的部分叫做形参列表或参数列表,它描述的是从调用函数传递给被调函数的信息。
来看主函数的接口描述,该接口从int开始,可知,main()返回一个整数值。接下来是空括号,表示main()函数不接受任何信息,或者说,main()函数不接受任何参数。
一般也可以写作:
int main (void)
这里使用了关键字void
,明确地指出了函数不接受任何参数。
对于返回语句,C++在main()函数中,可以省略,当编译器到达main()函数末尾时,没有遇到返回语句,则认为main()函数以如下语句结尾:
return 0;
但是这仅仅适用于main()函数,而不适用于其他函数。
C++注释
C++注释以//
打头,必要的注释解释代码可以增加程序的可读性。
C++预处理器和iostream文件
如果程序要使用C++输入(cin
)和输出(cout
)工具,需提供一下这样的两行代码:
#include <iostream> using namespace std;//可使用其他程序替换简化程序
预处理器:
C++和C一样,也使用一个预处理器,在该程序进行主编译之前对源文件进行处理。预处理不必执行特殊的操作来调用该预处理器,它会在编译程序时自动运行。
#include 编译指令:
#include <iostream>
该编译指令导致预处理器将iostream文件
的内容添加到程序中。这是一种典型的预处理器,在源代码被编译之前,替换或添加文本。
#include 编译指令
导致iostream文件中的内容随源代码文件的内容一起被发送给编译器。
实际上,iostream文件的内容将取代程序中的代码行#include<iostream>
,原始文件没有被修改,而是将源代码文件和iostream组合成一个符合文件,编译的下一个阶段将使用该文件。
头文件名
像iostream这样的文件叫做包含文件(include file)——由于它们被包含在其他文件中;也叫做头文件(header file)——由于它们被包含在文件起始处。
名称空间
命名空间是C++的新特性,它能解决命名冲突
问题。
例如,小明定义了一个函数swap(),C++标准库中也存在一个swap()函数,此时,为了区分调用的是哪个swap()函数,可以通过命名空间来标识。
C++中的命名空间包括两种,一种是标准命名空间
,一种是自定义命名空间
。
std
是C++标准命名空间,由于C++标准库几乎都定义在std命名空间中,因此编写的所有C++程序都需要引入下列语句:
using namespace std;
使用namespace
可以自定义命名空间,示例代码如下所示:
namespace lib { void fun(){} }
上述代码中,使用namespace定义了一个名称为lib的命名空间,该命名空间内部定义了一个func()函数。
如果要使用命名空间中定义的元素,有下列三种方式:
1.使用“命名空间::元素”方式指定命名空间中定义的元素。
例如,如果要在屏幕上输出数据,并且在末尾加上换行,就要使用标准命名空间std中的cout和endl,在使用cout和endl时,在cout和endl前面加上命名空间和“::”作用域标识符,示例如下:
std::cout<<"C++"<<std::endl;
2.使用using语句引用命名空间元素。
示例如下:
using std cout; std::cout<<"C++";
需要注意的是,这种方式只能使用using引入的元素,例如,无法单独使用endl这个元素,但可以通过std::endl的形式使用endl。
3.使用using语句直接引用命名空间
示例如下:
using namespace std;
这样引入std空间后,std中定义的所有元素就都可以被使用了。但是,针对上面我们提出的那个问题,当标准库中有swap()函数,也有自定义的swap函数呢,针对这个问题,我们可以使用“命名空间::元素
”方式指定具体要引用的元素。
使用count进行C++输出
cout<<"Come up and C++ me some time.";
<<
符号表示该语句将把这个字符串发送给cout;该符号指出了信息流动的路径。
cout是什么呢?它是一个预定义的对象
,知道如何显示字符串、数字和单个字符等。
从概念上来讲,输出是一个流,即从程序流出的一系列字符,cout对象表示这种流,其属性是在iostream文件中定义的。cout的对象属性包括一个插入运算符(<<),它可以将其右侧的信息插入到流中。
对于:
cout<<"Come up and C++ me some time.";
与其说程序显示了一条消息,不如说它是将一个字符串流入到了输出流中。
控制符 endl
cout <<endl;
endl
是一个特殊的C++符号,表示一个重要的概念:重启一行。在输出流中插入endl将导致屏幕光标移到下一行开头。
诸如endl等对于count来说有特殊含义的特殊符号被称为控制符
。和cout一样,endl也是在头文件iostream
中定义的,且位于名称空间std
中。
换行符
cout <<"What's next?\n";
\n
被视为一个字符,名为换行符。
在显示字符串时,在字符串中包含换行符,而不是在末尾加上endl,可以减少输入量。
例如:
cout <<"Pluto is a dwarf planet.\n";
cout <<"Pluto is a dwarf planet."<<endl;
如果要生成一个空行,则两种方法的输入量相同。
cout<<"\n";
cout<<endl;
在显示字符串时,通常使用换行字符"\n",其他情况下,则使用控制符endl。
两者的区别是,endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而使用“\n”不能提供这样的保证,这意味着在有些系统中,有时可能在输入信息之后才会出现显示。
C++源代码的格式化
源代码中的标记和空白
一行代码中不可分割的元素叫做标记
。通常,必须使用空格、制表符或回车将两个标记分开,空格、制表符和回车统称为空白
,有些字符是不需要空格分开标记。
C++源代码风格
- 每条语句占一行。
- 每个函数都有一个开始花括号和结束花括号,这两个花括号各占一行。
- 函数中的语句相对于花括号进行缩进。
- 与函数名称相关的圆括号周围没有空白。