[C++ Essence Shop] 1. C++ 名前空間ネームスペースの概要、iostream 標準ストリームの最初の理解

目次

1. 名前空間

1.1 名前空間を定義する

1.2 ::スコープ修飾子

 1.3 ディレクティブの使用

2. インプットとアウトプットについての最初の知識

2.1 ストリームの書き込み <<

2.2 ストリーム抽出>>

注: << または >> のどちらであっても、型は自動的に認識できます。これは、これらの異なる型のオペランドを処理するために、標準ライブラリで異なるバージョンの入力演算子と出力演算子が定義されているためです (演算子のオーバーロード、演算子のオーバーロードとして理解できます)。オーバーロードについては後で説明します。紹介します)


1. 名前空間

        C言語を使った大規模なプロジェクトでは、複数人で協力して同名の関数を定義することがよくあり、これらのファイルが同じファイルに含まれていると同名エラーが表示され、この問題が発生します。これも C 言語作業者にとっては非常に厄介な問題であり、C 言語の継承と発展として C++ も解決策を提案し、名前空間の概念が生まれました。

1.1 名前空間を定義する

        名前空間は、私たちがよくドメインと呼ぶものでもあります。C++ で開発するときは、通常、モジュールのすべての関数を名前空間に配置し、キーワード namespace を使用して名前空間を定義する必要があります。構文は次のとおりです。

namespace zybjs
{
	//
}

        また、名前空間はネストされた定義をサポートしており、次のように、呼び出し時には内部ドメインの優先順位が外部ドメインの優先順位よりも高くなります。

namespace zybjs
{
	void hello()
	{
		std::cout << "zybjs:hello c++";
	};
	namespace zy
	{
		void hello()
		{
			std::cout << "zy:hello c++";

		}

		void test()
		{
			hello();
		}
	}
}
int main()
{
	zybjs::zy::test();
}

 操作結果:

1.2 ::スコープ修飾子

(1)市内通話

        :: スコープ修飾子は名前空間を指定するために使用され、通常これを使用する場合は、指定したい名前空間を先頭に追加して、対応する名前空間内の関数を呼び出すことができます。

namespace zybjs
{
	void hello()
	{
		std::cout << "zybjs:hello c++"<< std::endl;
	};
	namespace zy
	{
		void hello()
		{
			std::cout << "zy:hello c++" << std::endl;

		}
	}
}
int main()
{
	zybjs::hello();
	zybjs::zy::hello();
}

操作結果: 

 (2) グローバルコール

        グローバル呼び出しは、実際には、次のように、名前空間を指定せずにグローバル スコープ内の関数を呼び出します。

(ここで使用する名前空間 std はグローバル拡張と呼ばれます。これについては後で紹介します)

using namespace std;
int main()
{
	::cout << "I love c++";
}

 1.3 ディレクティブの使用

(1) グローバル展開

        グローバル展開とは、実際には、指定した展開済み名前空間の内容をグローバル ドメインに展開することであり、グローバル ドメインに展開すると、ドメイン スコープ修飾子を使用せずに内部のコンテンツを直接呼び出すことができます。ただし、展開後、グローバルドメインで定義した関数が同じ名前の場合はエラーが発生するため、実際のプロジェクト開発ではグローバル展開を使用することは一般的には避けていますが、普段の業務ではグローバル展開を使用することで改善することができます。 . 効率。構文は次のとおりです。

using namespace 域名;

(2) 一部拡大

        グローバル展開はプロジェクト開発に問題を引き起こすためですが、確かに頻繁に呼び出す必要がある関数がいくつかあります。このとき、次のようにローカル展開を使用して単一の関数またはドメインを拡張できます。

using std::cout;
int main()
{
	cout << "I love c++";
}

2. インプットとアウトプットについての最初の知識

        C++ 言語には入出力 (io) ステートメントは定義されていませんが、io メカニズムを提供する包括的な標準ライブラリが含まれています。たとえば、 iostreamm ライブラリには 2 つの基本タイプ istream (入力ストリーム) と ostream (出力ストリーム) が含まれており、標準ライブラリにはiostream オブジェクト cin、ostream オブジェクトcout 、cerr および clog を含む 4 つの IO オブジェクトが定義されています。cerrclog は一般的に使用されないため、標準入出力とも呼ばれるcin と coutのみを理解する必要があります。

2.1 ストリームの書き込み <<

        C++ では、式によって計算結果が生成されます。この計算結果は、通常、1 つ以上のオペランドと 1 つ以上の演算子で構成されます。ここで、出力演算子<<はメッセージを標準出力に出力します。<< 演算子は 2 つのオペランドを受け取ります。左側のオペランドは ostream オブジェクトである必要があり、右側のオペランドは出力する値です。

std::cout << "hello c++\n";

         これを使用すると、<< は次のように連続的に印刷できることがわかります。

std::cout << "hello c++" << std::endl;

これは、<< 演算の後、ostream オブジェクトが次の << 演算子の左側のオペランドとして返され、連続出力が実現されるためです。

補足:endl

        endl は、C++ のマニピュレータと呼ばれる特別な値です。その機能は、現在の行を終了してバッファをフラッシュし、ストリームがメモリに書き込まれるのを待つ代わりに、出力ストリームに書き込まれたすべての出力を実際に書き込むことです。

さらに詳しく知りたい場合は、\n \r endl の関連記事を検索してください。ここでは多くを紹介しません。

2.2 ストリーム抽出>>

        >> は、左オペランドとして istream オブジェクトを受け入れ、右オペランドとして別のオブジェクトを受け入れるという点で、出力演算子 << に似ています。左側の istream オブジェクトのストリームからデータを抽出し、右側のオブジェクトに格納し、同時に istream オブジェクトを返します。したがって、>> は継続的な抽出と保存もサポートしています。

int a = 0,b = 0;
cin >> a >> b;

注: << または >> のどちらであっても、型は自動的に認識できます。これは、これらの異なる型のオペランドを処理するために、標準ライブラリで異なるバージョンの入力演算子と出力演算子が定義されているためです (演算子のオーバーロード、演算子のオーバーロードとして理解できます)。オーバーロードについては後で説明します。紹介します)

おすすめ

転載: blog.csdn.net/qq_64293926/article/details/132066891