C++语言程序设计

C++语言对C语言扩充和增强的几点具体体现
C++在增加面向对象的特征之外，还对C语言进行了扩充和增强。主要的增强点有如下几个：
1． 注释
在C语言块注释的形式
/*
Explanation Sentence
*/
的基础上，C＋＋语言提供了一种新的单行注释形式：
//Explanation Sentence
即用"//"表示注释开始，从该位置直到当前行结束的所有字符都被作为注释。
举个简单的例子：

| 例1-4：

/*
下面的程序段计算从1到100的整数和，
结果记录在变量sum中
*/
sum = 0; //变量sum初值置为零
for（i ＝ 1; i <= 100; i++）
{//循环体开始
sum += i; // 依次累加i
}

2． 更加灵活的变量说明
在传统的C语言中，局部变量的说明必须集中放在执行代码的前面，数据说明语句和执行语句的混合将引起编译错误。而在C++中，可以在程序代码块的任何地方进行局部变量的说明。比如下面的代码在C语言中是不正确的，在C++语言中却可以正常运行。
for(int i = 1; i < = 100; i++);
这样做的好处是使变量的定义和它的使用集中在一起，意义一目了然。
3． 更加严格的函数原型说明
C++摒弃了C语言对函数原型随意简化的方式，这种简化是许多C语言程序错误的根源。C++语言要求编程者为函数提供完整的原型，包括全部参数的类型和返回值得说明。
例如，有字符型和双精度类型两个参数、返回整型值的函数f，原型应该写为：
int f(char, double);
而C语言中允许将这个原型写成"f( )；"。
在函数原型说明中，参数名可有可无，并且可以和函数定义中的参数名不一致。
4． 增加了函数重载机制
重载是程序语言领域的重要概念。常规语言中最典型的例子是"+、－、×、/"等各种算术运算符的重载，这些符号可以同时用来表示多种类型数据之间的运算，这种对一个名字或一个符号赋予多重意义的情况就叫重载。
C++语言增加了C语言所没有的函数重载机制。对一个函数名可以给出多个函数定义，只要这些定义可以通过参数个数或类型的不同区别开来即可。
C++还允许对系统中预先定义的运算符号进行重载，增加新的定义。这样做的优点是在今后对新定义类型的变量进行运算时，计算公式写起来方便自然。
5． 函数缺省参数
C++中允许函数有缺省参数。所谓缺省，是指函数调用时可以不给出实际的参数值。下面是一个有缺省参数的函数定义的实例：

| 例1-5：
| int f(int a, int b=1) { return a*b; }

此后，函数调用f(3,1)和f(3)将返回同样的结果。
6． 更加方便的动态存储分配
C++为了提高内存管理上的灵活性，提供了动态内存分配合释放的操作符new和delete，用来增强C语言中原有的函数malloc()和free();
7． 增加了内联函数（Inline Function）
C++提供了内联函数，用以代替C语言中的宏。宏的处理机构是预处理器而不是编译器，它虽然可以提高效率，但是却不能实现函数调用所拥有的参数类型检查等机制。内联函数不但能够象宏那样节约函数调用时保存现场所需的系统开销，提高程序执行效率，还保留了函数进行参数类型检查的机制；并且C++语言中的宏是不能够存取对象私有成员变量的，但是使用内联函数，则没有这一限制。
8． 输入/输出流机制
C＋＋保留了C语言标准库中各种输入/输出函数，而且提供了一套新的输入/输出机制――流机制。
比如向标准输出输出一个字符串：
cout<<"C++ is beautiful!";
或者由标准输入读一个整数，赋给变量a
int a;
cin>>a;
流式输入/输出运算符能够根据变量类型自动确定数据交换过程中的转换方式，还可以定义"<<、>>"的重载，方便了编程者自定义类型的数据的输入/输出。
9． 作用域限定运算符：：
作用域限定运算符：：用于对当前作用域之外的同名变量进行访问。例如在下面的例子中，我们可以利用::实现在局部变量a的作用域范围内对全局变量a的访问。

| 例1-6：

#include <iostream.h>
int a;
void main()
{
float a;
a = 3.14;
::a = 6;
cout<<"local variable a = "<<a<<endl;
cout<<"global variable a ="<<::a<<endl;
}
程序执行结果如下：
local variable a = 3.14
global variable a = 6