C++ の名前空間 |セット 3 (アクセス、ヘッダーの作成、ネストとエイリアス)

C++ の名前空間 |セット 1 (導入) C++ の名前空間 |セット 2 (名前空間の拡張と名前なしの名前空間)

名前空間にアクセスするさまざまな方法: C++ では、名前空間の変数と関数にアクセスする方法が 2 つあります。

名前空間の定義:

名前空間定義は、次のようにキーワード namespace で始まり、その後に名前空間名が続きます。

 namespace  namespace_name    
{
// code declarations i.e. variable  (int a;)
method (void add();)
classes ( class student{};)
}

右中括弧の後にセミコロン (;) がないことに注意してください。
関数または変数の名前空間対応バージョンを呼び出すには、次のように名前空間名を先頭に追加します。
名前空間名: :code;  // コードは変数関数またはクラスです。

using ディレクティブ:

using namespace ディレクティブを使用して名前空間の先頭に追加することを避けることもできます。このディレクティブは、後続のコードが指定された名前空間内の名前を使用していることをコンパイラーに伝えます。 
したがって、名前空間は次のコードに暗黙的に含まれます。

C++
   #include          using     namespace     std  ;   // first name space   namespace     first_space   {      void     func  ()      {      cout      < <     'Inside first_space'      < <     endl  ;      }   }   // second name space   namespace     second_space   {      void     func  ()      {      cout      < <     'Inside second_space'      < <     endl  ;      }   }   using     namespace     first_space  ;   int     main     ()   {      // This calls function from first name space.      func  ();      return     0  ;   }   

using ディレクティブで導入された名前は、通常のスコープ ルールに従います。名前は、using ディレクティブの位置から、そのディレクティブが見つかるスコープの終わりまで表示されます。外側のスコープで定義された同じ名前のエンティティは非表示になります。

ネストされた名前空間:

名前空間はネストでき、次のように 1 つの名前空間を別の名前空間内に定義できます。

 namespace namespace_name1    
{
  // code declarations
  namespace namespace_name2 
  {
     // code declarations
  }
}

次のように解決演算子を使用して、ネストされた名前空間のメンバーにアクセスできます。
// namespace_name2 のメンバーにアクセスする
ネームスペース namespace_name1::namespace_name2 を使用します。
// 名前空間:name1 のメンバーにアクセスします
ネームスペース namespace_name1 を使用します。


上記のステートメントでは、namespace_name1 を使用している場合、次のようにスコープ内で namespace_name2 の要素が使用可能になります。

C++
   #include          using     namespace     std  ;   // first name space   namespace     first_space   {      void     func  ()      {      cout      < <     'Inside first_space'      < <     endl  ;      }      // second name space      namespace     second_space      {      void     func  ()      {      cout      < <     'Inside second_space'      < <     endl  ;      }      }   }   using     namespace     first_space  ::  second_space  ;   int     main     ()   {      // This calls function from second name space.      func  ();          return     0  ;   }   

1. 通常の方法  

CPP
   // C++ program to demonstrate accessing of variables   // in normal way i.e. using '::'   #include      using     namespace     std  ;   namespace     geek   {      int     rel     =     300  ;      }   int     main  ()   {      // variable ‘rel’ accessed       // using scope resolution operator      cout     &  lt  ;  &  lt  ;     geek  ::  rel     &  lt  ;  &  lt  ;     &  quot  ;    n  &  quot  ;;     // prints 300      return     0  ;   }   

出力:

 300   

2. 'using' ディレクティブ  

CPP
   // C++ program to demonstrate accessing of variables   // in normal way i.e. using 'using' directive   #include      using     namespace     std  ;   namespace     geek   {      int     rel     =     300  ;      }   // use of ‘using’ directive   using     namespace     geek  ;   int     main  ()   {      // variable ‘rel’ accessed       // without using scope resolution variable      cout     &  lt  ;  &  lt  ;     rel     &  lt  ;  &  lt  ;     &  quot  ;    n  &  quot  ;;     //prints 300          return     0  ;   }   

出力:

 300   

ヘッダー ファイルでの名前空間の使用 1 つのファイルに名前空間を作成し、別のプログラムを使用してコンテンツにアクセスできます。これは次の方法で行われます。

  • 2 つのファイルを作成する必要があります。名前空間と、後で使用するすべてのデータ メンバーとメンバー関数を含むもの。
  • また、他のプログラムは最初のプログラムを直接呼び出して、そのプログラム内のすべてのデータ メンバーとメンバー関数を使用できます。

ファイル1  

CPP
   // file1.h    namespace     foo   {      int     value  ()         {         return     5  ;         }   }   

ファイル2  

CPP
   // file2.cpp - Not to be executed online   #include      #include file1.h   // Including file1   using     namespace     std  ;   int     main     ()      {      cout     &  lt  ;  &  lt  ;     foo  ::  value  ();      return     0  ;   }   

ここでは、名前空間が file1.h で作成され、その名前空間の value() が file2.cpp で呼び出されていることがわかります。 ネストされた名前空間 C++ では、名前空間をネストすることもできます。つまり、1 つの名前空間を別の名前空間の中に入れることもできます。名前空間変数の解決は階層的です。 

CPP
   // C++ program to demonstrate nesting of namespaces   #include      using     namespace     std  ;   // Nested namespace   namespace     out   {      int     val     =     5  ;         namespace     in      {      int     val2     =     val  ;         }   }   // Driver code   int     main  ()   {      cout     &  lt  ;  &  lt  ;     out  ::  in  ::  val2  ;     // prints 5      return     0  ;   }   

出力:

 5   

名前空間のエイリアス: C++ では、使いやすくするために、名前空間名にエイリアス名を使用できます。次の構文を使用して、既存の名前空間に新しい名前を付けることができます。

 namespace new_name = current_name;   
CPP
   #include      namespace     name1      {      namespace     name2         {      namespace     name3         {      int     var     =     42  ;      }      }   }   // Aliasing    namespace     alias     =     name1  ::  name2  ::  name3  ;       int     main  ()   {      std  ::  cout     &  lt  ;  &  lt  ;     alias  ::  var     &  lt  ;  &  lt  ;     'n'  ;   }   

出力:

 42   

GeeksforGeeks が好きで貢献したい場合は、次を使用して記事を書くこともできます。 write.geeksforgeeks.org または、記事を [email protected] にメールで送信してください。 GeeksforGeeks のメイン ページにあなたの記事が掲載されているのを見て、他のオタクを助けてください。