C ++の名前空間は、コードを論理グループに編成し、特にコードベースに複数のライブラリが含まれている場合に発生する可能性のある名前の衝突を防ぐために使用されます。この記事では、次のポインタについて説明します。
データ構造とアルゴリズムjava
名前空間の必要性
ある状況を考えてみましょう。abc()という関数を持つコードを記述していて、同じ関数abc()を持つ別の定義済みライブラリが利用可能です。これで、コンパイルの時点で、コンパイラーには、コード内で参照しているabc()関数のバージョンがわかりません。
この困難を克服するために、名前空間が設計され、異なるライブラリで使用可能な同じ名前の類似した関数、変数、クラスなどを区別するための追加情報として使用されます。名前空間を使用して、名前が定義されているコンテキストを定義できます。本質的に、名前空間はスコープを定義します。
すべてのC ++標準ライブラリのタイプと関数は、std名前空間またはstd内にネストされた名前空間で宣言されているため、ほとんどのプログラムで広く使用されています。
名前空間の定義
名前空間を定義するには、次のように、キーワードnamespaceで開始し、その後に名前空間名を続けます。
namespace namespace_name {int a、b //コード宣言// aとbは// namespace_nameのスコープで宣言されます}
名前空間を定義する際に覚えておくべきポイント
- 名前空間宣言は、グローバルスコープでのみ表示されます。
- 名前空間宣言にはアクセス指定子がありません。
- 名前空間宣言は、別の名前空間内にネストできます。
- 名前空間の定義の閉じ中括弧の後にセミコロンを付ける必要はありません。
- 名前空間の定義は、複数のユニットに分割できます。
#include using namespace std namespace first_function {void func(){cout<< 'Inside first_function' << endl } } namespace second_function { void func() { cout << 'Inside second_function' << endl } } int main () { // Calls function from first name space. first_function::func() // Calls function from second name space. second_function::func() return 0 }
出力:
上記の例では、func()関数を2回定義するために、名前空間の概念を使用しています。名前空間first_functionの下に最初の関数を定義し、名前空間second_functionの下の2番目の関数。これらの関数を呼び出すには、次の方法でスコープ解決演算子を使用します– first_function :: func()およびsecond_function :: func()。
C ++での名前空間の使用
プログラムで名前空間を使用する方法は3つあります。
- usingディレクティブ
- 使用宣言
- スコープ解決演算子(::)
usingディレクティブ
名前空間に名前空間を追加することを回避できます を使用して 名前空間ディレクティブ。 を使用して キーワードを使用すると、名前空間全体をグローバルスコープでプログラムにインポートできます。要件に応じて、名前空間を別の名前空間または任意のプログラムにインポートするために使用できます。
ソート関数c ++
ヘッダーファイルNamespace_first.hについて考えてみます。
名前空間First {int a class First_class {int i}}
上記の名前空間ヘッダーファイルをNamespace_second.hファイルにインクルードします。「Namespace_first.h」をインクルードします。
名前空間Second {名前空間FirstFirst_class obj intyを使用}
namespace_Firstをnamespace_Secondにインポートするため、クラスFirst_classがnamespace_Secondで使用できるようになります。したがって、次のプログラムを別のファイル、たとえばnew_file.cppに書き込むことができます。
#include'Namespace_second.h 'void test(){using namespace Second //クラスFirst_classFirst_classobj2のオブジェクトを作成する}
したがって、 、usingディレクティブを使用すると、C ++で名前空間を好きな場所で簡単に使用できます。
使用宣言
using-declarationでは、現在のスコープ内でのみ使用可能な特定の名前を一度に1つインポートし、スコープ解決の助けを借りて呼び出されます。注:using-declarationでインポートされた名前は、usingディレクティブでインポートされた名前をオーバーライドできます。これは、以下の例で確認できます。
ヘッダーファイルNew_File.hについて考えてみましょう。
名前空間First {void A(){cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }
次に、以下のコードを使用して、New_file_2.cppという名前の新しいプログラムファイルを作成しましょう。
#include'New_file.h 'void B(){using namespace First // usingディレクティブusing Second :: A //使用宣言First :: A()// First名前空間A()のクラスA()//呼び出しA ()の2番目の名前空間}
スコープ解決演算子(::)
名前空間の名前とスコープ解決を使用して、名前空間で宣言された任意の名前を明示的に指定できます。 :: ' 識別子を持つ演算子。
名前空間New_space {class X {static int i public:void func()} //クラス名宣言classY} //静的クラス変数の初期化intNew_space :: X :: i = 23 class New_space :: Y {int a public: int getdata(){cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }
C ++での不連続な名前空間
C ++の名前空間はいくつかの部分で定義できるため、個別に定義された部分の合計で構成されます。したがって、名前空間の一部で別のファイルで定義された名前が必要な場合でも、その名前はそのスコープで宣言する必要があります。次の名前空間を次のように記述すると、新しい名前空間が定義されるか、既存の名前空間に新しい要素が追加されます。
名前空間namespace_name {//コード本体}
C ++でネストされた名前空間
名前空間は簡単にネストでき、次のように別の名前空間内に1つの名前空間を定義できます。
namespace namespace_name1 {// namespace_name1のコード本体namespacenamespace_name2 {//コード本体のネストされたnamamespace_name2}}
これで、C ++の名前空間の記事は終わりです。 C ++の名前空間とは正確には何であり、それを定義するさまざまな方法は何かを理解していただければ幸いです。詳細を知りたい場合は、 信頼できるオンライン学習会社であるEdurekaによる。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Hibernate&SpringなどのさまざまなJavaフレームワークに加えて、コアJavaコンセプトと高度なJavaコンセプトの両方についてトレーニングするように設計されています。
質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。
Javaのセットの種類