1.3.04_C++ネーミングスペース

3928 ワード

このような場合、あるクラスにZaraという学生が2人いる場合、それらを明確に区別するために、私たちは名前のほかに、家族の住所や両親の名前など、追加の情報を使用しなければなりません.
同様の状況はC++アプリケーションにも現れます.たとえば、xyz()という名前の関数を書くことができます.別の使用可能なライブラリにも同じ関数xyz()があります.これにより、コンパイラはどのxyz()関数を使用しているかを判断できません.
そこで,異なるライブラリ内の同じ名前の関数,クラス,変数などを区別するための付加情報として利用できるネーミング空間という概念を導入した.ネーミングスペースを使用すると、コンテキストが定義されます.本質的に、ネーミングスペースは範囲を定義します.
ネーミングスペースの定義
ネーミングスペースの定義には、キーワードnamespaceが使用され、ネーミングスペースの名前が次のように表示されます.
namespace namespace_name {
   //     
}

ネーミングスペースを持つ関数または変数を呼び出すには、次のようにネーミングスペースの名前を付ける必要があります.
name::code;  // code         

ネーミングスペースが変数や関数などのエンティティの範囲を定義する方法を見てみましょう.インスタンス
#include 
using namespace std;
 
//        
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
//        
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
int main ()
{
 
   //              
   first_space::func();
   
   //              
   second_space::func(); 
 
   return 0;
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
Inside first_space
Inside second_space

义齿
USing namespaceコマンドを使用すると、ネーミングスペースを使用するときにネーミングスペースの名前を付ける必要がなくなります.このコマンドは、後続のコードが指定したネーミングスペースの名前を使用することをコンパイラに伝えます.≪インスタンス|Instance|emdw≫
#include 
using namespace std;
 
//        
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
//        
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
using namespace first_space;
int main ()
{
 
   //              
   func();
   
   return 0;
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
Inside first_space

usingコマンドは、ネーミングスペース内の特定のアイテムを指定するためにも使用できます.たとえば、stdネーミングスペースのcoutセクションのみを使用する場合は、次の文を使用できます.
using std::cout;

後続のコードではcoutを使用する場合、接頭辞としてネーミングスペース名を付けなくてもよいが、stdネーミングスペース内の他の項目には、以下のようにネーミングスペース名を接頭辞として付ける必要がある.
#include 
using std::cout;
 
int main ()
{
 
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
std::endl is used with std!

using命令が導入した名前は、通常の範囲規則に従います.名前は、範囲が終了するまでusingコマンドを使用して表示されます.この場合、範囲外で定義された同名エンティティは非表示になります.
不連続なネーミングスペース
ネーミングスペースはいくつかの異なる部分で定義できるため、ネーミングスペースはいくつかの個別に定義された部分から構成されています.1つのネーミングスペースの各コンポーネントは、複数のファイルに分散できます.
したがって、ネーミングスペースのコンポーネントが別のファイルに定義された名前を要求する必要がある場合は、名前を宣言する必要があります.
次のネーミングスペース定義は、新しいネーミングスペースを定義することも、既存のネーミングスペースに新しい要素を追加することもできます.
namespace namespace_name {
   //     
}

ネストされたネーミングスペース
ネーミングスペースはネストできます.次のように、1つのネーミングスペースで別のネーミングスペースを定義できます.
namespace namespace_name1 {
   //     
   namespace namespace_name2 {
      //     
   }
}

:演算子を使用すると、ネストされたネーミングスペースのメンバーにアクセスできます.
//    namespace_name2     
using namespace namespace_name1::namespace_name2;
 
//    namespace:name1     
using namespace namespace_name1;

上の文でnamespace_を使用している場合name 1では、この範囲内でnamespace_name 2の要素も使用できます.次に例を示します.
#include 
using namespace std;
 
//        
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
   //        
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}
using namespace first_space::second_space;
int main ()
{
 
   //              
   func();
   
   return 0;
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
Inside second_space

コードリンク:https://github.com/karst87/cpp/tree/master/learning/com.runoob