C++是C语言的功能上的扩展,两者并不是对立的。可以用下面的逻辑来描述C与C++的关系:C语言+面向对象方法论===》object C/C++。
每一门语言都是在实践的过程中逐渐完善起来的,在C语言的发展历程中,C固然有很多优点,但是在其发展过程中,
{
1.没有深思熟虑的设计过程;
2.我们在使用C时存在很多的灰色地带,使我们在开发的过程中,有时很难找到一个错误发生的根本原因;
3.虽说C语言是一种高级语言,但是C依然存在一些低级语言的特征;
4.因为C直接利用指针进行内存操作,所以C语言是比较接近底层的一门语言,更加靠近硬件。
}
当作为一种面向过程的语言--C在暴漏越来越多的缺陷的时候,业界人士开始在项目中引入面向对象的设计方法C++。
在我们讨论C++在哪些方面对C有加强之前,我们需要了解一些事情:
{
C语言和C++并不是对立的竞争关系
C++是C语言的加强,是一种更好的C语言
C++是以C语言为基础的,并且能够完全兼容C语言的特性
}

下面讨论C++基于C的增强:
1.命名空间namespace
当我们在C语言中定义函数时,如果两个函数名相同或者两个函数分别有名称相同的变量时,我们在调用时就有可能会发生冲突,如果两个函数函数名相同我们就不能确定我们到底调用了哪一个函数。于是在C++中,我们对这一问题做到了优化--使用了命名空间:A公司开发的函数存放在namespace A中,B公司开发的函数存放在namespace B中,当我们要调用函数时,我们就指明需要调用的是A公司的函数还是B公司的函数,然后通过域访问符::来进行调用。可以有以下三种方式(以标准输出输出流为例):
a、直接指定标识符。例如std::ostream而不是ostream。完整语句如下: std::cout << std::hex << 3.4 << std::endl;
b、使用using关键字。 using std::cout; using std::endl; using std::cin; 以上程序可以写成 cout << std::hex << 3.4 << endl;
c、最方便的就是使用using namespace std; 例如: using namespace std;这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。
2.实用性增强
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int i = 0; 6 7 printf( "I love blog !" ); 8 9 int j ; 10 system("pause"); 11 12 return 0; 13 }
上述main函数中函数体部分在C语言编译运行不通过,原因是 在 i 和 j定义中间有一句printf语句,在C语言中规定变量都必须在作用域开始的位置定义!而上述语句在C++中就可以编译通过,原因是在C++中进行了实用性增强:变量可以在需要使用的时候定义。
3.register关键字增强
//register关键字 请求编译器让变量a直接放在寄存器里面,速度快
//在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容
/*
//1
register关键字的变化
register关键字请求“编译器”将局部变量存储于寄存器中
C语言中无法取得register变量地址
在C++中依然支持register关键字
C++编译器有自己的优化方式,不使用register也可能做优化
C++中可以取得register变量的地址
//2
C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
//3
早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
*/
int main22()
{
register int a = 0;
printf("&a = %x\n", &a);
system("pause");
return 0;
}
未完待续...