【小白学习C++ 教程】十三、C++命名空间namespace
2021/7/30 1:06:08
本文主要是介绍【小白学习C++ 教程】十三、C++命名空间namespace,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
@Author:Runsen
文章目录
- 访问命名空间
- 嵌套命名空间
- 命名空间别名
任何C++程序都有声明namespace,比如下面的C++程序没有声明namespace
int main() { int value; value = 0; double value; value = 0.0; }
编译器错误:'value' 先前声明为 'int value'
在每个作用域中,一个名称只能代表一个实体。因此,在同一个作用域中不能有两个同名的变量。使用命名空间namespace,我们可以创建两个具有相同名称的变量或成员函数。
#include <iostream> using namespace std; // Variable created inside first namespace namespace first { int val = 500; } // Global variable int val = 100; int main() { // Local variable int val = 200; // operator :: cout << val << '\n'; // 200 cout << first::val << '\n'; // 500 return 0; }
命名空间允许我们将具有全局作用域的命名实体分组为更窄的作用域,赋予它们命名空间作用域。这允许将程序的元素组织到由名称引用的不同逻辑范围中。
-
命名空间namespace是 C++ 中添加的一项功能,C 中不存在。
-
命名空间是一个声明性区域,为其中的标识符(类型、函数、变量等的名称)提供范围。
-
允许多个具有相同名称的命名空间块。这些块中的所有声明都在命名范围内声明。
-
命名空间定义以关键字命名空间开头,后跟命名空间名称,如下所示:
namespace namespace_name { int x, y; }
- 命名空间声明仅出现在全局范围内。
- 命名空间声明可以嵌套在另一个命名空间中。
- 命名空间声明没有访问修饰符。
- 命名空间定义的右大括号后不需要分号。
#include <iostream> using namespace std; namespace ns1 { int value() { return 5; } } namespace ns2 { const double x = 100; double value() { return 2*x; } } int main() { cout << ns1::value() << '\n'; //5 cout << ns2::value() << '\n'; //200 cout << ns2::x << '\n'; //100 return 0; }
在类中,创建命名空间:
以下是在命名空间中创建类的简单方法
#include <iostream> using namespace std; namespace ns { class geek { public: void display() { cout << "ns::geek::display()\n"; } }; } int main() { ns::geek obj; obj.display(); return 0; }
访问命名空间
在 C++ 中,有两种访问命名空间变量和函数的方法。
正常方式
#include <iostream> using namespace std; namespace geek { int rel = 300; } int main() { cout << geek::rel << "\n"; // prints 300 return 0;
“using ”指令
#include <iostream> using namespace std; namespace geek { int rel = 300; } // use of ‘using’ directive using namespace geek; int main() { cout << rel << "\n"; //prints 300 return 0; }
在头文件中使用命名空间
我们可以在一个文件中创建命名空间并使用另一个程序访问内容。这是通过以下方式完成的。
- 我们需要创建两个文件。一个包含命名空间以及我们稍后要使用的所有数据成员和成员函数。
- 另一个程序可以直接调用第一个程序来使用其中的所有数据成员和成员函数
// file1.h namespace foo { int value() { return 5; } } // file2.cpp - #include <iostream> #include “file1.h” // Including file1 using namespace std; int main () { cout << foo::value(); return 0; }
在这里我们可以看到命名空间是在file1.h
中创建的,并且在file2.cpp
中调用了该命名空间的value()
方法。
嵌套命名空间
在 C++ 中,命名空间也可以嵌套,即一个命名空间嵌套在另一个命名空间中。命名空间变量的解析是分层的。
#include <iostream> using namespace std; // Nested namespace namespace out { int val = 5; namespace in { int val2 = val; } } // Driver code int main() { cout << out::in::val2; // prints 5 return 0; }
命名空间别名
在 C++ 中,可以为命名空间名称使用别名,以方便使用。现有命名空间可以使用新名称作为别名,具体示例如下:
#include <iostream> namespace name1 { namespace name2 { namespace name3 { int var = 42; } } } // Aliasing namespace alias = name1::name2::name3; int main() { std::cout << alias::var << '\n'; }
这篇关于【小白学习C++ 教程】十三、C++命名空间namespace的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15在使用平台私钥进行解密时提示 "私钥解密失败" 错误信息是什么原因?-icode9专业技术文章分享
- 2024-11-15Layui框架有哪些方式引入?-icode9专业技术文章分享
- 2024-11-15Layui框架中有哪些减少对全局环境的污染方法?-icode9专业技术文章分享
- 2024-11-15laydate怎么关闭自动的日期格式校验功能?-icode9专业技术文章分享
- 2024-11-15laydate怎么取消初始日期校验?-icode9专业技术文章分享
- 2024-11-15SendGrid 的邮件发送时,怎么设置回复邮箱?-icode9专业技术文章分享
- 2024-11-15使用 SendGrid API 发送邮件后获取到唯一的请求 ID?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 tags标签最多有多少个?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 怎么批量发送给多个人?-icode9专业技术文章分享
- 2024-11-15如何搭建web开发环境并实现 web项目在浏览器中访问?-icode9专业技术文章分享