そのような場合を想定し、クラスがザラという名前の2人の学生を持っている場合、明確に区別するために、名前の使用に加えて、自宅の住所として、いくつかの追加情報を使用していた、または両親の名前ように。 同じ状況がまた、Cに表示されます ++ アプリケーション。関数の例では、名前付きXYZ()を記述するかもしれない、別のライブラリで利用できる同じ機能xyzのは()もあります。したがって、コンパイラは、一方がXYZ()関数を使用するかを決定することができません。 したがって、上記の問題を解決するために設計された名前空間の概念の導入は、それが同じライブラリ関数名、クラス、変数などの追加情報を区別することがあります。すなわち、名前空間定義されたコンテキストを使用して。本質的には、名前空間は、範囲の定義です。 例えば、コンピュータシステム、フォルダ(ディレクトリ)が複数のフォルダを含んでもよく、各フォルダは、同じファイル名を持つことができるが、別のファイルフォルダが同じ名前であることができます。
名前空間を定義する ネームスペースキーワード定義された名前空間は、名前空間の名前が続くことは、次の通り: 名前空間namespace_name { // コード宣言 } スペースで呼び出す関数または変数名には、接頭辞、名前空間の名前に必要です次のように 名前::コードを; // コードは、変数や関数とすることができます
そのような機能またはエンティティとしての変数が範囲どの名前空間定義: の#include <iostreamの> 使用して 名前空間STD; // 最初の名前空間 名前空間first_space { ボイドFUNC(){ COUT << " インサイドfirst_space " << ENDL; } } / / 秒のネームスペース のネームスペースsecond_space { 無効FUNC(){ COUT << " インサイドsecond_space " << てendl; } } int型)(メイン { // 最初の名前の関数空間呼び出す first_space :: FUNCを(); //は、第2の機能名前空間の呼び出し second_spaceを:: FUNC(); 戻り 0 ; }
あなたは使用することができます使用して 名前空間の名前空間の名前が先行する名前空間を使用することができないときにという、ディレクティブを。このコマンドは、後続のコードでは、名前空間を指定した名前を使用することをコンパイラに指示します。 #include <iostreamの> 使用して 名前空間STD; // 最初の名前空間 名前空間first_space { ボイドFUNC(){ COUT << " インサイドfirst_space " << ENDL; } } // 第二の名前空間 名前空間second_space { ボイドFUNC( ){ COUT << " インサイドsecond_space " << ENDL; } } 使用 名前空間first_space; int型のmain() { // 呼び出し最初の名前空間関数 FUNC(); 戻り 0 ; } 上記のコードがコンパイルおよび実行されると、次の結果を生成する: インサイドfirst_spaceを
使用説明書はまた、特定のアイテムの名前空間を指定するために使用されてもよいです。 使用してのstd :: coutを、 あなたは接頭辞として名前空間名を追加することはできませんCOUT使用中、後続のコードが、それでも以下のように、接頭辞として名前空間名を追加する必要があるのstd名前空間その他の項目: の#include <入出力ストリーム> 使用STD :: COUT; int型のmain() { COUT << " STD STD :: ENDLを用いて使用されている!" << STD :: ENDL; 戻り 0 ; } 使用して、通常のスコープルールの導入後の命令の名前。名前の使用から使用開始コマンドを範囲の端まで表示されています。この場合、エンティティが隠されている定義された同じ名前の範囲外。
不連続な名前空間 名前空間は、いくつかの異なるセクションで定義することができるので、名前空間が、そのいくつかの別個の部分によって定義されます。名前空間の様々なコンポーネントを複数のファイルに分散させることができます。 だから、別のファイルで定義された要求の名前空間名に一部の必要がある場合、あなたはまだ名前を宣言する必要があります。以下の名前空間定義は、既存の名前空間に新しい要素を追加することができ、新しい名前空間を定義することができる: 名前空間namespace_nameは{ // コードが宣言します }
ネストされた名前空間の 名前空間は、次のように、名前空間で定義することができ、別の名前空間を入れ子にすることができます。 名前空間namespace_name1 { // コードを宣言し た名前空間namespace_name2 { // コードを宣言 } }
::オペレータがアクセスメンバーにネストされた名前空間を使用することができます: // アクセスnamespace_name2メンバーをで 使用して 名前空間namespace_name1 :: namespace_name2; // アクセス名前空間:中NAME1メンバー 使用して 名前空間の namespace_name1。
次のように上記のステートメントでは、namespace_name1場合、要素の範囲内でも利用可能namespace_name2: の#include <iostreamの> 使用して 名前空間STDを; // 最初の名前空間 名前空間first_space { ボイドFUNC (){ COUT << " インサイドfirst_space " << ENDL; } // 第二の名前空間 名前空間second_space { ボイドFUNC(){ COUT << " インサイドsecond_space " << ENDL; } } } 使用して 名前空間:: second_space first_space; int型のmain() { // 第二の名前空間内の関数を呼び出す FUNC(); 戻り 0 ; }