C++与C的区别(一)
头文件与命名空间
在C++中创建的源文件为.cpp文件,而包含头文件的方式依旧是两种:包含自己的头文件和包含库文件。
(1)包含自己的文件和C没有任何区别,依旧是.h文件。例如:#include“myHead.h”,包含自己创建的头文件
。
(2)在包含库文件的过程中C和C++就有些许的区分: 在包含C头文件的时候可以采用原来的方式,可以用C++包含方式,去掉.h 并在前面加个c,例如:#include。
注意:为 C++标准输入输出流的头文件!
C++中命名空间的引入
1、命名语法:namespace 空间名{}
命名空间使用例子:
//基本创建空间方法
namesapce 空间名
{
int a;
void print(){}
}
//访问命名空间中的东西,用空间名限定去访问
int main()
{
空间名::a=1100;
空间名::print();
return 0;
}
2、作用域分辨符::
(1)空间名限定,类名限定;
namespace name
{
int a=2;
void print();
}
void name::print()
{std::cout<<"空间中声明,外部实现"<<std::endl;}
//这样也是被允许的
(2)用来表示全局变量
//例如我们这里有一个全局变量和局部变量
int num=1;
int main()
{
int num=2;
printf("%d\n",num);//此处打印的是2;
/*C语言当中当我们局部变量和全局变量作用域相同时:
那么采用就近原则*/
printf("%d\n",::num);//此处打印的是1;
/*所以为了能够区分全局变量和局部变量,利用作用域分辨符
来标识当前变量为全局变量*/
}
3、命名空间也增加标识符的使用率,C语言同一个作用域下不允许定义相同的标识符
4、using语法,可以省略前缀的写法
using namespace 空间名;
//可以省略当前的空间名,只在当前作用域下有效
**注意:**使用using namespace语法过程中,不要存在二义性问题,也就是出现两个选择,例如:
namespace nam
{
int a=1;
void print();
}
namespace sum
{
int a=2;
void print();
}
int main()
{
using namespace nam;
printf("%d",a);
// using namespace sum;
//printf("%d",a);此处存在二义性问题
return 0;
}
5、空间名的嵌套与空间内容的访问,依旧是利用作用域分辨符一层一层的去访问,例如:
namespace A
{
int a=1;
namesapce B
{
int b=2;
}
}
A::B::b=110;
using namespace A::B;
b=110;