C++对C的增强,表现在两个方面:
(1) 在原来面向过程的机制基础上,对C语言的功能做了不少扩充。
(2) 增加了面向对象的机制。
// test1 #include <iostream> using namespace std; int main() { count << "This is a C++ program."; return 0; } // 输出结果:This is a C++ program.
用 main代表主函数的名字。每一个 C++程序都必须有一个main函数。
main前面的 int 的作用是声明函数的类型为整型。
如果程序不能正常执行,则会自动向操作系统返回一个非零值,一般为 -1。
函数体是由大括号 { } 括起来的。
注意 C++ 所有语句最后都应当有一个分号。
程序的第1行#include <iostream>, 这不是C++的语句,而是 C++ 的一个预处理命令,它以 # 开头以与 C++语句相区别,行的末尾没有分号。
#include <iostream>是一个包含命令,它的作用是:将文件 iostream 的内容包含到该命令所在的程文件中,代替该命令行。
由于这类文件都放在程序单元的开头,所以称为头文件 (head file)。
在程序进行编译时,先对所有的预处理命令进行处理,将头文件的具体内容代替 #include 命令行,然后再对该程序单元进行整体编译。
程序的第2行 using namespace std; 的意思是:使用命名空间 std。 C++ 标准库中的类和函数是在命名空间 std 中声明的,因此程序中如果需要用到 C++ 标准库 (此时就需要用 #include 命令行),就需要用 using namespace std; 作声明,表示要用到命名空间 std 中的内容。
// test2 // 求a和b两个数之和 #include <iostream> using namespace std; int main() { int a, b, sum; cin >> a >> b; sum = a + b; cout << "a + b = " << sum << endl; return 0; } // 如果在运行时从键盘输入:123 456,则输出为:a + b = 579
// test3 // 求两个数中的大者 #include <iostream> using namespace std; // 定义max函数,获取最大数 int max( int x, int y ) { int z; if ( x > y ) { z = x; } else { z = y; } return z; } int main() { int a, b, m; cin >> a >> b; m = max( a, b ); cout << "max = " << m << endl; return 0; } // 运行时输入:18 25,则输出为:max = 25
在上面的程序中, max 函数出现在 main 函数之前,因此在 main 函数中调用 max 函数时,编译系统能识别 max 是已定义的函数名。如果把两个函数的位置对换一下,即先写 main 函数,后写 max 函数,这时在编译 main 函数遇到 max 时,编译系统无法知道 max 代表什么含义,因而无法编译,按出错处理。
为了解决这个问题,在主函数中需要对被调用函数作声明。上面的程序可以改写如下:
// test4 // 对test3做修改 #include <iostream> using namespace std; int main() { int max( int x, int y ); // 对max函数作声明 int a, b, m; cin >> a >> b; m = max( a, b ); cout << "max = " << m << endl; return 0; } // 定义max函数,获取最大数 int max( int x, int y ) { int z; if ( x > y ) { z = x; } else { z = y; } return z; } // 运行时输入:18 25,则输出为:max = 25
函数声明的位置应当在函数调用之前。
// test5 // C++程序 #include <iostream> using namespace std; class Student { public: // 公有 void setdata() { cin >> num; cin >> score; }; void display() { cout << "num = " << num << endl; cout << "score = " << score << endl; }; private: // 私有 int num; int score; }; // 注意class结尾的分号 Student stud1, stud2; // 定义stud1和stud2为Student类的变量,称为对象 int main() { stud1.setdata(); stud2.setdata(); stud1.display(); stud2.display(); return 0; } / 运行时输入:1001 98.5回车 1002 76.5回车,则输出:num = 1001 score = 98.5 num = 1002 score = 76.5
在一个类中包含两种成员:数据和函数,分别称为 数据成员 和 成员函数。
在 C++ 中把一组数据和有权调用这些数据的函数封装在一起,组成一种称为 类(class) 的数据结构。
成员函数是用来对数据成员进行操作的。也就是说,一个类是由一批数据以及对其操作的函数组成的。
类可以体现数据的封装性和信息隐蔽。
在上面的程序中,在声明 Student类时,把类中的数据和函数分为两大类:private(私有的) 和 public(公用的)。
在大多数情况下,会把所有数据指定为私有,以实现信息隐蔽。
具有 类 类型特征的 变量 称为 对象(object)。
C++ 程序的结构和书写格式归纳如下:
(1)一个 C++程序可以由一个程序单位或多个程序单位构成。每一个程序单位作为一个文件。在程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元。
(2) 在一个程序单位中,可以包括以下几个部分:
① 预处理命令。上节 4 个程序中都包括 #include命令。
② 全局声明部分 (在函数外的声明部分)。在这部分中包括对用户自己定义的数据类型的声明和程序中所用到的变量的定义。
③ 函数。函数是实现操作的部分,因此函数是程序中必须有的和最基本的组成部分。每一个程序必须包括一个或多个函数,其中必须有一个(而且只能有一个)主函数(main函数)。
但是并不要求每一个程序文件都必须具有以上 3 个部分,可以缺少某些部分( 包括函数 )。
(3) 一个函数由两部分组成:
① 函数首部,即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。一个函数名后面必须跟一对圆括号,函数参数可以缺省,如 int main( )。
② 函数体,即函数首部下面的大括号内的部分。如果在一个函数中有多个大括号,则最外层的一对 { }为函数体的范围。函数体一般包括:
• 局部声明部分 (在函数内的声明部分 )。包括对本函数中所用到的类型、函数的声明和变量的定义。对数据的声明既可以放在函数之外 (其作用范围是全局的),也可以放在函数内 (其作用范围是局部的,只在本函数内有效)。
• 执行部分。由若干个执行语句组成,用来进行有关的操作,以实现函数的功能。
(4)语句包括两类。一类是声明语句,另一类是执行语句。C++ 对每一种语句赋予一种特定的功能。语句是实现操作的基本成分,显然,没有语句的函数是没有意义的。 C++ 语句必须以分号结束。
(5) 一个 C++ 程序总是从 main 函数开始执行的,而不论 main 函数在整个程序中的位置如何。
(6) 类(class) 是 C++ 新增加的重要的数据类型,是 C++ 对 C 的最重要的发展。有了类,就可以实现面向对象程序设计方法中的 封装、信息隐蔽、继承、派生、多态 等功能。在一个类中可以包括数据成员和成员函数,他们可以被指定为私有的(private)和公用的(public)属性。私有的数据成员和成员函数只能被本类的成员函数所调用。
(7) C++ 程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。
(8) 一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。 C++ 还保留了 C 语言的注释形式,可以用 // 和 /* */。
一个程序从编写到最后得到运行结果要经历以下一些步骤:
1. 用 C++ 语言编写程序
用高级语言编写的程序称为 “源程序” ( source program )。 C++ 的源程序是以 .cpp 作为后缀的 (cpp是 c plus plus 的缩写)。
2. 对源程序进行编译
为了使计算机能执行高级语言源程序,必须先用一种称为 “编译器 (complier) ” 的软件 (也称编译程序或编译系统 ),把源程序翻译成二进制形式的 “目标程序(object program)”。
编译是以源程序文件为单位分别编译的。目标程序一般以 .obj 或 .o 作为后缀 (object的缩写) 。编译的作用是对源程序进行词法检查和语法检查。编译时对文件中的全部内容进行检查,编译结束后会显示出所有的编译出错信息。一般编译系统给出的出错信息分为两种,一种是错误 (error); 一种是警告 (warning)。
3. 将目标文件连接
在改正所有的错误并全部通过编译后,得到一个或多个目标文件。此时要用系统提供的 “连接程序 (linker) ” 将一个程序的所有目标程序和系统的库文件以及系统提供的其他信息连接起来,最终形成一个可执行的二进制文件,它的后缀是 .exe, 是可以直接执行的。
4. 运行程序
运行最终形成的可执行的二进制文件 (.exe文件) ,得到运行结果。
5. 分析运行结果
如果运行结果不正确,应检查程序或算法是否有问题。