1. 名前空間を理解する
名前空間ネームスペースは、翻訳された名前空間を分割し、各関数名または変数には独自の使用範囲があるため、関数名の使用の競合の問題が回避されます。
たとえば、クラスに張三という名前の 2 人がいる場合、この 2 人を区別するには、太った張三、やせた張三などの別名を付ける必要があります。
コードでも同じことが当てはまります
2. 名前空間の使用
namespace(关键字) (自定义名字){
// 代码声明
}
//调用命名空间
(自定义名字)::(变量或者函数);
#include <stdio.h>
namespace std
{
void cout()
{
printf("cout");
}
}
int main()
{
std::cout();
return 0;
}
スコープの関数を呼び出すたびにスペース名を持ってくるのは面倒だと思う人もいるかもしれません。
using キーワードを使用すると、スペース名を省略できます。
#include <stdio.h>
namespace std
{
void cout()
{
printf("cout");
}
}
using std::cout;
int main()
{
cout();
return 0;
}
3. 互いに素な名前空間
さまざまなグラフィックス関連の関数とクラスが含まれるグラフィックス処理ライブラリを開発しているとします。名前空間を使用して、これらの関数を整理および分類できます。
まず、ファイル内に名前空間を定義して、Geometry
グラフィックス関連の関数とクラスを含めます。
// Geometry.h
namespace Geometry
{
class Point
{
//...
};
void drawLine()
{
//...
printf("drawLine");
}
//...
}
次に、その名前空間を別のファイルで拡張し、さらに関数とクラスを追加します。
// Shapes.h
namespace Geometry
{
class Circle
{
//...
};
void drawRectangle()
{
//...
printf("drawRectangle");
}
//...
}
Geometry
不連続な名前空間を使用することで、 .h 名前空間は基本的な幾何学的図形の操作を担当し、Shapes.h
名前空間は特定の形状の描画を担当するなど、機能を論理的に分割できます。
使用する場合は、必要に応じて必要な名前空間を選択的に組み込み、それが提供する機能を使用できます。
// main.cpp
#include <stdio.h>
#include "Geometry.h"
#include "Shapes.h"
int main() {
Geometry::drawLine();
Geometry::drawRectangle();
return 0;
}
このような設計により、コードをより適切に整理および管理でき、名前の競合を回避でき、関数を拡張する必要がある場合は、対応するファイルを追加して名前空間を拡張するだけで済みます。
4. ネストされた名前空間
名前が示すように、関数のように入れ子にして呼び出すことができます。
命名空间可以嵌套,您可以在一个命名空间中定义另一个命名空间,如下所示:
namespace namespace_name1 {
// 代码声明
namespace namespace_name2 {
// 代码声明
}
}
可以通过使用 :: 运算符来访问嵌套的命名空间中的成员:
// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;
// 访问 namespace_name1 中的成员
using namespace namespace_name1;
例えば:
#include <stdio.h>
namespace std
{
void cout()
{
printf("cout");
}
namespace std1
{
void cout()
{
printf("cout1");
}
}
}
using std::std1::cout;
int main()
{
cout();
return 0;
}