目录
1. 编译指示
2. 声明性语句
3. 可执行语句
4. 简单语句
5. 复合语句
6. 控制语句
7. 函数
8. 类的定义和使用
9. 注释
请谨记
在介绍C++程序构成之前,我们先看一个简单Hello world的C++程序。Hello world 程序的源代码如下。为了方便描述,我们这里为Hello world程序加上行号。Hello world 虽然简单,但是它涵盖了C++程序所包含的所有组成。
// 最简单的Hello world示例程序,实现Hello world屏幕打印 C++语言的注释。
001 #include <iostream> // 编译指示,告诉编译器在编译过程中所需信息的来源。
003 using namespace std; // 声明性语句,using namestapce std; 是告诉编译器使用std命名空间。
005 int main(int argc, char * argv[]) // main 函数,每个C++程序都必须包含此main函数。
006 {
007 // 屏幕打印Hello world C++语言的注释
008 cout << "Hello world!" << endl; // 可执行性语句
009 return 0; // main函数返回值。
010 }
我们先简单的概括一下C++程序构成:C++程序包含一个或多个函数,但是必须有一个main函数。操作系统通过调用main函数实现程序的执行,程序执行完毕后必须由main函数返回一个值给操作系统。在C++程序中可能还会包含编译指示,声明语句,类对象定义和使用等非必选项。
现在我们对照Hello world分析一下。
1. 编译指示
001行代码是一句“编译指示”,编译指示功能就是告诉编译器编译过程中所需要的一些信息。它们影响一个程序是否能被正确的编译,并在程序运行期造成影响。编译指示格式为:在新的一行中,以#开始并且不使用“分号”结束。
比如,Hello world实例:
#include<iostream>
就是告诉编译器,<iostream>中实现的对象在后续代码中可以使用,并且对后续代码造成输出Hello world影响。
2. 声明性语句
003行是一句“声明性语句”,声明性语句在作用上完全等同于“编译指示”:他们同样仅影响编译过程,但在编译结果中并不生成对应的指令。003行是一种声明性语句,常见的声明性语句还有下述这种。在一个cpp文件中定义,
int nValue = 2;
在另外一个cpp文件中声明nValue变量,
extern int nValue;
extern int nValue; 也是声明性语句,在编译过程中不生成对应指令,只是告诉编译器nValue已经在别处定义了,你可以直接使用无需再次定义。
提示:声明性语句是C++的标准语句,只是它不生成指令。声明性语句在语法格式上和普通语句没有明显区别。
3. 可执行语句
007和008两行就是可执行语句。可执行语句和声明性语句一样都是C++的标准语句。但是与声明性语句不同,可执行语句在编译过程中生成对应的指令。可执行语句类似于自然语言中的句子,C++中有完成单一任务的简单语句,也有作为一个单元执行的一组语句组成的复合语句。还有条件分支语句和循环控制语句,所以可执行语句按照其功能可以分成:简单语句,复合语句,控制语句,try语句等。
说明:可执行语句是C++程序的主题,大型C++工程99%以上的代码都是可执行语句。
4. 简单语句
这种语句是最常用的一种语句形式。我们经常写的表达式语句,空语句都属于简单语句。通过简单语句可以完成某单一功能。如下面这行代码就完成两数的求和。
iVal = v1 + v2;
5. 复合语句
复合语句通常被称为块语句。使用花括号括起来的语句序列(可以为空),既一个复合语句或语句块。块标示了一个作用域,在块中引入的标识符名称只能在该块或该块嵌入的子块中可以访问,此语句块以外无法访问。
复合语句通常用在语法规则要求使用单个语句,但程序逻辑却需要不止一个语句的地方。下述代码就是一个标准的复合语句块。
{
int iVal = 0;
iVal = 1 + sum(1, 5);
}
此复合语句定义了一个只在此语句块可见的int变量iVal,然后将1和sun(1, 5)的和赋给iVal。在语句块之外iVal不可见。
6. 控制语句
控制语句完成程序的逻辑控制,常见的控制语句有if-else语句,for循环语句,while循环语句,do-while循环语句及goto语句等。这些语句主要完成程序逻辑和流程的控制。是C++语言的重要组成部分。
7. 函数
函数是C++程序的重要组成部分, C++的函数定义必须包含4个元素:返回类型,函数名称,圆括号内的形参表和函数体。这里所说的函数体指的是以花括号开始并以花括号结束的语句块。Hello world 程序中main函数就是C++的一个标准函数,main函数的返回类型为int,函数名称为main,形参表为空,函数体为大括号包含的006到010共5行语句。
函数的名称说明函数的功能,返回值返回函数执行后输出结果,形式参数表示函数的输入或输出。函数体决定函数的执行过程。在C++函数中有一个特别重要的关键字,用于在函数语句执行完之后返回结果给回调者。这个关键词就是“return”。一般函数定义格式如下:
返回类型 函数名称(形式参数1,形式参数2,…,形式参数n);
{
return ;
}
为了描述的更加形象,现在我们看一个字符串输出打印函数,代码如下:
// 实现字符串打印输出
void StrPrint(char *pszPrtStr) 实现打印输出
{
// 在屏幕上输出字符串。
printf(“this string is %s\n”, pszPrtStr); // 在屏幕上输出字符串。
return;
}
函数的函数名称为:StrPrint,意思为字符串打印函数。返回类型为void,表示返回类型为空类型。只有一个形式参数是指向字符串的指针pszPrtStr,类型为char *。
C++和C函数的区别:
- C++的函数定义必须同时包含返回类型,函数名称,形参表格和函数体。但是在C++标准化之前返回类型不是必须的,如果一个函数缺少显示返回类型,函数的返回类型将被假定为int类型。
- C语言的函数定义由于历史发展的原因可以没返回类型。如下述的Max函数在C语言编译器中编译时就是合法的。在标准化后的C++编译器中编译就是非法的。这儿需要说明的是C语言中如果一个函数没有返回值,默认返回int类型。
// 求两数的最大值
Max(int nA, int nB)
{
return (nA > nB)?(nA):(nB);
}
8. 类的定义和使用
C++是一个面向对象的语言,类在C++中占用举足轻重的地位,占有主体的地位。一个类的定义包括类成员变量和类成员方法定义,后续章节会员专门的议题讨论类的定义和使用,在此例中cout就是一个类对象,使用此类对象我们可以完成数据的输出和显示功能。
9. 注释
注释顾名思义就是C++程序的解释。他不是C++程序的必须组成部分,但是重要组成部分。注释可帮助他人阅读程序,理解程序的意图。注释不会增加C++程序可执行程序的大小,因为在编译时编译器会忽略所有注释。
C++有两种类型的注释:单行注释和成对注释两种。
-
单行注释以双斜线(//)开头,行中双斜线右方的所有内容就是注释,会被编译器忽略。
-
成对注释指(/**/),从C语言继承而来,这种注释以/*开头,以*/结束。编译器把落入注释对/**/中的内容作为注释。注释对可以跨越程序的多行,但不是一定要如此。
注意:注释对不可嵌套,注释总是以/*开始并以*/结束。这意味着,一个注释对不能出现在另一个注释对中。
另外由注释对嵌套导致的编译器错误信息容易使人迷惑。所以在实际编程过程中需养成良好的编程习惯,禁止注释对嵌套。
请谨记
-
一个C++程序是完成某一功能的一个整体,它由编译指示,执行性语句,声明性语句,函数及注释等组成。
-
每个C++程序都必须有一个入口函数即main函数,这个函数的名称必须为main,返回类型必须为int。