【小白学习C++ 教程】十三、C++命名空间namespace
【摘要】 @Author:Runsen
文章目录
访问命名空间嵌套命名空间命名空间别名
任何C++程序都有声明namespace,比如下面的C++程序没有声明namespace
int main()
{ int value; value = 0; double value; value = 0.0;
}
1234567
编译器错误:'value' 先前声明...
@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';
}
Code : 使用数组计算数字平均值的 C++ 程序
该程序从用户获取 n 个元素(其中 n 由用户指定),将数据存储在数组中并计算这些数字的平均值。
#include <iostream>
using namespace std; int main ()
{ int n ; float num[100], sum = 0.0 ,ave ; cout << "输入数据个数: "; cin >> n; for (int i = 0; i < n; i++) { cout << i+ 1 ; cin >> num[i]; sum += num[i]; } ave = sum / n; cout << "平均数= " << ave ;
}
文章来源: maoli.blog.csdn.net,作者:刘润森!,版权归原作者所有,如需转载,请联系作者。
原文链接:maoli.blog.csdn.net/article/details/119221280
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)