命名空间(namespace)详解(一)
域
在学习命名空间之前,我们首先要了解几种常见的域
一、域的种类
1、类作用域
类作用域是指定义在类内部的成员(包括数据成员和成员函数)的可见性和访问权限的范围
代码示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
// 定义一个名为MyClass的类
class MyClass
{
public:
// 类内的成员变量
int memberVar;
// 类内的成员函数
void memberFunction()
{
// 在成员函数内部可以直接访问类的成员变量
memberVar = 10;
std::cout << "在成员函数中,成员变量的值为:" << memberVar << std::endl;
}
};
int main()
{
// 创建MyClass类的对象
MyClass obj;
// 通过对象访问类的成员变量
obj.memberVar = 5;
std::cout << "在main函数中,通过对象设置成员变量的值为:" << obj.memberVar << std::endl;
// 通过对象调用类的成员函数
obj.memberFunction();
return 0;
}
2、命名空间域
命名作用域是一个区域,在这个区域内,一个特定的名字(比如变量名、函数名、类名等)是有意义的,并且可以被正确地引用。简单来说,它定义了一个范围,在这个范围里,名字具有明确的、独一无二的身份。
代码示例:
#include <iostream>
using namespace std;
namespace myspace
{
int a = 10;
int Add(int x, int y)
{
return x + y;
}
}
int main()
{
cout << myspace::a << endl;
cout << "hello world!" << endl;
return 0;
}
3、局部域
局部变量的作用域通常被限定在定义它们的函数或代码块内,局部变量的生命周期通常与函数的执行周期相对应。 当函数被调用时,局部变量被创建;当函数执行完毕时,局部变量被销毁。
代码示例:
#include <stdio.h>
int a = 10;
int main()
{
{
int b = 0;
printf("b的值为:%d\n", b);
}
//b是局部变量,作用域为所在的局部区域
//printf("%d", b);
//a为全局变量,作用域是全局的,可以在程序中的任意地方使用
printf("a的值为:%d\n", a);
}
4、全局域
全局变量存放在静态存储区中。 因此他们的生存周期是固定的,存在于程序的整个运行过程中。
代码示例:
#include <stdio.h>
int a = 10;
int main()
{
{
int b = 0;
printf("b的值为:%d\n", b);
}
//b是局部变量,作用域为所在的局部区域
//printf("%d", b);
//a为全局变量,作用域是全局的,可以在程序中的任意地方使用
printf("a的值为:%d\n", a);
}
二、访问顺序
在代码中访问顺序为
优先局部域 >> 其次访问全局域 >> 访问展开命名作用域或指定访问命名空间域
1、访问局部域
#include <stdio.h>
#include <stdlib.h>
int a = 10;
int main()
{
int a = 0;
printf("%d\n", a);
}
运行这段代码发现,只会打印局部变量a的值
2、访问全局域
那么如何才能访问全局变量的值呢?在C++中有以下办法
#include <stdio.h>
#include <stdlib.h>
int a = 10;
int main()
{
int a = 0;
printf("全局变量a的值为:%d\n", a);
printf("全局变量a的值为:%d\n", ::a);
}
在这段代码中我们运用了符号 : : (域作用限定符),
空格 + : : 就可以顺利访问全局变量a的值
3、访问命名空间域
接下来再看一段代码
#include <stdio.h>
#include <stdlib.h>
int atof = 1;
int main()
{
printf("%d\n", atof);
}
在这段代码中,假设在不知情的情况下定义了一个名为atof的变量,在main函数中打印这个变量的值,但是我们会发现代码会报错
经查可知,头文件stdlib.h中包含了名为atof的函数,此时我们再定义atof的变量就会报错,那么如何解决这个问题呢?就有了命名空间的用法
#include <stdio.h>
#include <stdlib.h>
namespace myspace
{
int atof = 1;
}
int main()
{
printf("atof的值为%d\n", myspace::atof);
}
此时我们创建了一个名为myspace的命名空间,通过访问myspace就可以成功获得atof的值
访问命名空间的方法
-
展开命名空间域
假设需要访问std (标准库)
using namespace std
注意:展开相当于把命名空间的内容暴露在全局中,有风险,不建议使用
-
指定访问命名空间
假设访问命名空间myspace中的变量a
printf("a的值为:%d\n",myspace::a);
原文地址:https://blog.csdn.net/Xiaodao12345djs/article/details/143799023
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!