namespaces c
簡単な例を使用したC ++の名前空間の完全な概要。
これまでのチュートリアルでは、C ++で使用される変数、宣言、関数、およびその他のそのようなエンティティに関するすべてを見てきました。
C ++でアプリケーションを開発しているときに、同じ変数名が2回使用されたり、関数が同じプロトタイプで定義されたりするなど、いくつかの特殊な状況が発生する場合があります。これらのシナリオが発生すると、コンパイラーが、あいまいさを引き起こしている正しい変数または関数呼び出しを推測することが困難になります。 。
=> ここで完璧なC ++トレーニングガイドをチェックしてください。
持っているのに最適なメールは何ですか
学習内容:
名前空間とは何ですか?
以下の例を見てみましょう。
#include #include int main() { int var; double var; std::cin>>var; }
出力:
関数「intmain()」内:
8:10:エラー:競合する宣言「doublevar」
7:7:注:「intvar」としての以前の宣言
上記の例では、タイプは異なるが識別子が同じ2つの変数を定義しました。したがって、この例をコンパイルすると、(出力)ウィンドウに示すようなエラーが発生します。これらの矛盾する宣言は、2つの変数に名前を付けるために同じ識別子が使用されているために発生します。
このタイプの状況は、アプリケーションにあいまいさを生じさせます。
C ++では、「 名前空間 」を使用して、この問題を解決します。 C ++の名前空間は、同じ識別子を持つ1つまたは複数の変数を区別するために使用されるパッケージ、領域、またはライブラリのようなものです。
名前空間には、変数、関数、クラス、その他のオブジェクト、さらには別の名前空間を含めることができます。名前空間の各メンバーは、名前空間スペースを使用して参照できます。これは、コンパイラが同じ名前であっても、さまざまなプログラミングエンティティを区別するのに役立ちます。
名前空間の定義
C ++では、キーワード「」を使用して名前空間を定義できます。 名前空間 以下に示すように」:
namespace namespace_name{ namespace_declarations; }
したがって、「test_space」という名前の名前空間を定義する必要がある場合は、次のように行うことができます。
namespace test_space{ int var=10; }
上記の宣言は、「test_space」という名前の名前空間を定義しています。示されているように、メンバーとして整数変数varがあります。
名前空間メンバーへのアクセス
これで、独自の名前空間「test_space」を定義しました。この名前空間のコンテンツにアクセスするにはどうすればよいですか?
C ++プログラムでは、次の構文を使用して名前空間のメンバーにアクセスできます。
namespace_name::namespace_member;
したがって、上記の名前空間「test_space」で宣言された整数変数varには、次のようにアクセスできます。
test_space::var;
名前空間とその使用法を示すには、以下の完全な例を参照してください。
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< 出力:
ローカル変数= 20.53
test_space :: var = 10
上記のプログラミング例では、名前空間の作成とアクセスについてすべて説明しました。ご覧のとおり、「test_space」は定義した名前空間です。単一の整数変数varが定義されています。次に、main関数に、初期化される別のdouble変数varがあります。
後で、これら両方の変数を表示します。 main内のローカルdouble変数は直接出力できますが、名前空間変数を出力するには、その前に名前空間名を付ける必要があることに注意してください。
これにより、前に説明したのと同じ名前であるため、変数間の衝突の問題も解決されました。
使用指令
前のトピックでは、namespace_name :: namespace_memberを使用して名前空間メンバーにアクセスできることを確認しました。
プログラムのどこにでも名前空間名を指定したくない場合は、「 を使用して 」ディレクティブは、プログラムに名前空間を含めます。
これは次のように行われます。
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< 出力:
ローカル変数= 20.53
test_space :: var = 10
上記の例では、名前空間「test_space」を定義した後、2つのステートメントを使用しました。
これらは:
using namespace std; using namespace test_space;
最初のステートメントは、宣言を使用して、C ++ライブラリで事前定義された標準名前空間である名前空間「std」にアクセスします。この名前空間は、cin、coutなどのさまざまな関数にアクセスするために使用されます。
2番目のステートメントは、プログラムに「test_space」名前空間を含めるために使用されます。
main関数では、coutやvariablevarなどの関数の前に名前空間名を付ける必要がないことがわかります。それらを直接参照することができます。ただし、varの名前はmain関数のローカル変数と衝突するため、名前空間にも常にグローバルスコープがあるため、スコープ解決演算子(::)を使用して参照します。
ネストされた名前空間
C ++では、ネストされた名前空間、つまり別の名前空間内に定義された名前空間を使用することもできます。
ネストされた名前空間の一般的な構文は次のとおりです。
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
ns2_codeにアクセスする必要がある場合は、次のようにアクセスできます。
ns1::ns2::ns2_code;
次のコード例を使用して、ネストされた名前空間を示します。
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; using namespace first::second; int main() { double var = 20.53; cout<<'local var = '< 出力:
ローカル変数= 20.53
first :: var = 10
2番目:: var = 20
上記のプログラムでは、ネストされた名前空間を使用しました。 usingディレクティブを使用して名前空間にアクセスする方法に注意してください。最も内側の名前空間を一度だけ参照するだけでは十分ではありません。最も外側の名前空間からのコードが必要な場合は、個別に参照する必要があります。
「エイリアス」と呼ばれる名前空間に別の名前を使用できます。これは、ネストされた名前空間を使用していて、ネストの程度が高い場合に特に役立ちます。
上記の例を変更することで、名前空間のエイリアスを示すことができます。
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< 出力:
ローカル変数= 20.53
first :: var = 10
2番目:: var = 20
名前空間first :: secondに対して定義されているネストされたエイリアスに注意してください。エイリアスが定義されると、エイリアス名を使用して名前空間を参照できます。
外部名前空間
アプリケーションで使用するには名前空間が多すぎる場合は、すべての名前空間を別のファイルに配置したい場合があります。これは簡単に行うことができます。名前空間が別のファイルにある場合は、そのファイルをプログラムに含めてから、名前空間とその内容をプログラムで直接使用します。
例えば、次の名前空間を含むns.hという名前のファイルがある場合。
//ns.h namespace first{ int var = 25; }
これで、プログラムで、名前空間「first」を次のように使用できます。
.binを開く方法
#include #include “ns.h” using namespace std; int main() { cout<したがって、名前空間を含むファイルをプログラムに含めると、同じプログラムでグローバルに宣言されているかのように名前空間を使用できます。
連続する名前空間
C ++では、連続した名前空間と呼ばれるものを定義することもできます。連続する名前空間は、同じ名前を持つことによって複数回定義される名前空間です。実際には、これらは個別の名前空間ではなく、同じ名前空間の拡張です。
連続する名前空間は、以下の例で明らかです。
#include #include . namespace first{ int var = 10; } namespace first{ namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< 出力:
ローカル変数= 20.53
first :: var = 10
2番目:: var = 20
上記の例では、同じ名前空間を2回定義していることに注意してください。最初の定義では、varという名前の変数があります。 2番目の宣言では、別の名前空間が定義されています。
main関数では、外部名前空間と内部名前空間のメンバーにアクセスしました。メンバーには簡単にアクセスできることに注意してください。
これは連続した名前空間の例であり、「不連続な名前空間」とも呼ばれます。それらの定義は別々に見えますが、実際には、それらは連続した名前空間です。
結論
これで、C ++の名前空間に関するこのチュートリアルは終了です。異なるスペースまたは領域でコードを分離できるようにする1つの方法での名前空間。これにより、コードの読み取りとメンバーの使用が明確になります。
以降のチュートリアルでは、例外処理、ファイル入出力など、C ++のさまざまな基本トピックについて詳しく学習します。
=> ここでC ++トレーニングチュートリアルのA〜Zを確認するには、ここをクリックしてください。
推奨読書