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