一.C语言与C++之间的联系
1.C语言是结构化和模块化的语言,适合处理较小规模的程序,对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。我们的C++祖师爷Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而 产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的 程序设计,还可以进行面向对象的程序设计。
二.命名空间
在C语言中,解决不了命名冲突的问题,什么是命名冲突呢?就比如下面一段代码
#include<stdio.h>
#include<stdlib.h>
int rand = 0;
int main()
{
printf("%d \n", rand);
return 0;
}
//error C2365: “rand”: 重定义;以前的定义是“函数”
当此代码运行时就会报错:“rand”: 重定义;以前的定义是“函数”,这是因为,stdlib.h这个文件中包含了以后rand()的函数,而编译器默认查找是先在局部域中,让后再到全局域中查找,所以,在编译链接的时候,头文件会展开,头文件里面的rand就跟我们全局的rand冲突了,这就是命名冲突.这就是C语言的问题之一.那么谁跟谁会产生命名冲突呢,形象的说,就是(我们和库,我们之间).
2.1命名空间定义
这时我们C++祖师爷为了解决这个问题,创建namespace关键字.定义命名空间,后面跟命名空间的名字,然后接一对{};里面即为命名空间的成员,这个空间即为命名空间域.
现在我们如何来解决命名空间冲突问题呢,我们接着看下下面一段代码:
#include<stdio.h>
#include<stdlib.h>
namespace bit
{
int rand = 0;
}
int main()
{
//因为编译器默认访问局部域,全局域,
//所以会打印头文件中rand的地址
printf("%p \n", rand);
//因为编译器默认访问局部域,全局域,
//所以如果要访问命名我们就先要(名字+::)
//所以就会打印命名空间域中的rand
printf("%d \n", bit::rand);
return