1.域的意义
在c语言的项目中,我们可能会因为变量的名字定义重复而报错,例如我们的命名和别人写的头文件的相关函数命名重合时,我们的程序就有会报错,所以在c++中我们引用了域的概念来完善c中的不足。
2.什么是域?
所谓域就是值一块独特的领域,这块领域包括它的所属成员(一个常量或者一个函数均可)。
我们来看以下代码:
//域1
namespace pro1
{
int x = 9;//领域所属成员x
}
//域2
namespace pro2
{
int x = 8;
}
int x = 1;//全局变量
int main()
{
printf("%d", pro1::x);//结果:9
return 0;
}
我们先不管这串代码是什么意思,我们后文会讲解到。
在这串代码中我们创建了两个域,这两个域虽然都有成员x,但这两个x是相互独立的存在。
当我们使用领域的所属成员时,我们需要再前面声明它是谁家的x,这就相当于告诉计算机:你给我去这个地方找人去,找不到就别回来啦!
3.域的命名
在c++中我们使用namespace的方法来命名一个域,namespace后面是域的名字,括号里的内容是域的成员,在这个域中我们虽然可以随心所欲的创建我们的成员,但在同一个域中我们依然不能使用完全相同的命名。
正确命名如下:
namespace pro3
{
struct heap
{
int data;
struct heap* left;
struct heap* right;
};
int Add(int x, int y)
{
return x + y;
}
int x = 8;//基本上想放什么就能放什么
}
那么如果我们命名两个域名字相同的域呢?我们的祖师爷早就想好了这种可能,所以当两个域的名字相同时就会自动合并为一个域。
例如:
namespace pro4
{
int a = 1;
}
namespace pro4
{
int b = 2;
}
//不会报错,相当于pro4成员里有两个成员一个是a另一个是b
4.域的使用
域在使用时使用的是预作用限定符,也就是‘::’,两个引号连用。
它是一个双目操作符,符号的左面是域的名称,右边是域的成员,当域里没有该成员时程序便会报错,让计算机在特定领域中找一个不存在的成员属实是强机所难了(doge)。
注意:如果我们不指定域我们无法使用那个域的成员!!
通过该符号我们可以改变域成员的值,引用里面的结构体,或者是函数等。
使用方法如下:
namespace pro3
{
struct heap
{
int data;
struct heap* left;
struct heap* right;
};//放一个结构体
int Add(int x, int y)
{
return x + y;
}//再放一个函数
int x = 8;
}
int main()
{
pro3::x = 9;
printf("%d ", pro3::x);//结果:9
printf("%d ", pro3::Add(1, 9));//函数的使用,结果:10
struct pro3::heap hp;//注意:结构体的使用有些不同,hp是这个结构体的名字
return 0;
}
编译器使用顺序
在常量名字相同时,常量的使用遵循以下规则:
1.如果没有指定域,优先使用局部变量,没有局部变量再使用全局变量。
2.如果指定了域,那么就使用域里的成员。
例如:
int x = 1;//全局变量
int main()
{
int x = 4;
printf("%d ", x);//结果:4
printf("%d",::x);//如果前面没有指定域那么就会使用全局变量,结果:1
return 0;
}
using的使用
using的使用方法如下:
using namespace 域的名字;
这个方法的使用可以使域里面的成员全部变成全局变量,如果是在局部定义的会变成局部变量,相当于把域的括号给删掉了,这样的话使用起来会方便一些。
例如:
namespace pro4
{
int b = 2;
}
using namespace pro4;
int main()
{
printf("%d", b);//可以直接使用了
return 0;
}
我们再举个例子,在我们引用头文件时,是无法直接使用里面的函数的,例如我们在使用cout…endl函数时一般会在前面这么写:
#include<iostream>
using namespace std;
这是因为cout…endl函数分装在了std域里面了,加上一句using会使用的更方便一些。
感谢各位观众老爷的观看~欢迎下次光临。