0 C++ の基本入門 まずは C++ を理解する パート 1

1. C++ キーワード (C++98)

C++ には合計 63 個のキーワードがあり、C 言語には 32 個のキーワードがあります。

ps: 以下では、C++ にどれだけのキーワードがあるかだけを見ていきます。キーワードについては詳しく説明しません。詳しくは後ほどお話します。

ここに画像の説明を挿入

2. 名前空間

C/C++ では、後で学習する変数、関数、クラスが多数あり、これらの変数、関数、クラスの名前はすべてグローバル スコープ内に存在するため、多くの競合が発生する可能性があります。名前空間を使用する目的は、名前の競合や名前汚染を避けるために識別子の名前をローカライズすることです。名前空間キーワードの登場は、この問題を解決することを目的としています。

それはどういう意味ですか?例えば:
画像の説明を追加してください

ここに画像の説明を挿入
上記のコードでは、コンパイラはエラーを報告します。コードを注意深く読むと、変数randがコード内で定義されていることがわかります。rand 関数を以前に知っていた場合は、それが実際にはライブラリ内の関数であることがわかります。 、乱数を生成するために使用できます。その rand は定義したグローバル変数であり、rand() 関数に対応するヘッダー ファイルも含まれているため、印刷時にグローバル スコープ内に 2 つの rand が見つかり、エラーが発生しました。

これは C 言語の欠陥です。C 言語はこの状況をうまく処理できません。定義した変数の名前を変更することしかできません。

C 言語ではこのような名前の競合を解決できないため、C++ はそれを解決する名前空間を提案します。
名前空間 (namespace) キーワードの出現は、この種の問題に向けられたものであり、名前空間を使用する目的は、名前の競合や名前汚染を避けるために識別子の名前をローカライズすることです。

では、どのような状況で、同じ名前の複数の変数または関数が名前の競合なしに同じプロジェクト内に表示されるのでしょうか?

ドメインが違えばスコープが干渉しないということは誰でも思いつくと思います。
別の例を見てみましょう。
画像の説明を追加してください
上のコードでは2 つの変数 a が定義されていますが、両方ともローカル変数であり、スコープはすべて独自の関数です。相互に干渉することはなく、プログラムはエラーを報告しません。

ここに画像の説明を挿入
ただし、上記のコードで main 関数内でプログラムを出力すると、エラーが報告されます。

では、なぜプログラムはエラーを報告するのでしょうか?

main 関数が a を出力したい場合、まず main 関数に対応するローカル領域で a を探しますが、main 関数で a を定義していないため、もちろん見つかりません。これはグローバルであり、定義した 2 つのそれぞれの a はローカルであるため、見つかりません。別のグローバル変数 a を定義する

、プログラムはエラーを報告しません。

前回の C 言語の学習で、グローバル変数とローカル変数が同じ名前の場合、ローカル変数が優先されることはわかりましたが、関数 f2() でグローバル変数 a を出力したい場合、何か方法はありますか?

画像の説明を追加してください
ここに画像の説明を挿入
上の図に示すように、グローバル変数 a は正常に出力されましたが、この記号を a の前に追加した後、グローバル変数 a が出力されるのはなぜでしょうか。

::はスコープ修飾子と呼ばれます。

a の前にスコープ修飾子を追加すると、 a を出力するときに指定されたスコープ内で直接検索します。:: の前に何も書かれていない場合は、限定されたスコープがグローバルであることを意味します。

上記の内容を理解した後、C++ の名前空間は競合を避けるために同様の考え方を使用します。

2.1 名前空間の定義

名前空間を定義するには、名前空間キーワード、その後に名前空間の名前を使用し、**{}** のペアを接続する必要があります。{} は名前空間のメンバーです。

前の例をもう一度見てみましょう
画像の説明を追加してください

前の説明で、この時点で名前の競合が発生することがわかりました。
画像の説明を追加してください
ここに画像の説明を挿入
上記のコードでは、名前空間とスコープ修飾子によって競合を解決しています。

名前空間では、変数だけでなく、関数なども定義できます。
画像の説明を追加してください

第 2 に、名前空間は入れ子にすることができます (マルチレベルの入れ子)。注意:同じ名前を持つ複数の名前空間は
画像の説明を追加してください
同じプロジェクト内で許可され、コンパイラは最終的に同じ名前空間を合成します。名前空間は新しいスコープを定義します。名前空間内のすべてのものは、その名前空間にスコープされます。

2.2 名前空間の使用法

·名前空間名とスコープ修飾子を追加します
画像の説明を追加してください
。 ·using を使用して名前空間のメンバーをインポートします画像の説明を追加してください
。 ·using 名前空間名前空間名を使用してインポートします。
画像の説明を追加してください

3. C++ の入出力

生まれたばかりの赤ちゃんは、独自の方法でこの真新しい世界を迎えます。C++ が登場して以来、それは新しいものとみなされています。C
ここに画像の説明を挿入
++ もこの素晴らしい世界を迎える必要がありますか? C++ がどのように実装されているか見てみましょう。
画像の説明を追加してください
例証します:

  1. cout 標準出力オブジェクト(コンソール) およびcin 標準入力オブジェクト(キーボード)を使用する場合は、 <iostream> ヘッダー ファイルをインクルードし、名前空間の使用法によって std を使用する必要があります。
  2. cout と cin はグローバル ストリーム オブジェクトであり、endl は改行出力を表す特別な C++ シンボルであり、これらはすべて <iostream> ヘッダー ファイルに含まれています。
  3. << はストリーム挿入演算子、>> はストリーム抽出演算子です。
  4. C++ の入出力を使用する方が便利で、printf/scanf の入出力のように形式を手動で制御する必要がありません。
    C++ の入力と出力では、変数の型を自動的に識別できます。
  5. 実際、cout と cin は、それぞれ ostream と istream 型のオブジェクトです。>> と << には、演算子のオーバーロードなどの知識も含まれます。この知識は後で学習するので
    、ここでは単に使用方法を学習します。この後、IO フローの使用法と原理について詳しく学ぶ章が設けられます。

注: 初期の標準ライブラリでは、すべての関数はグローバル ドメインで実装され、ヘッダー ファイルで . で宣言されており、ネームスペースを正しく使用するために、C++ ヘッダー ファイルには .h が含まれないことが規定されています。古いコンパイラ (vc 6.0) も <iostream.h> 形式をサポートしていますが、それ以降のコンパイラはサポートしていないため、 + stdを使用することをお勧めします。

std 名前空間を使用するための規則:

std は C++ 標準ライブラリの名前空間です。std をより合理的なものにするために拡張するにはどうすればよいですか?

  1. 日常の実践では、非常に便利な名前空間 std を直接使用することをお勧めします。
  2. 名前空間 std を拡張すると、標準ライブラリが完全に公開されるため、ライブラリと同じ名前の型/オブジェクト/関数を定義すると競合が発生します。この問題は日常業務ではほとんど発生しませんが、プロジェクト開発などでコード数が多く大規模な場合に発生しやすくなります。したがって、std::cout のように使用する場合は、名前空間を指定し、std::cout を使用して共通ライブラリ オブジェクト/型を拡張して、プロジェクト開発で使用することをお勧めします。

4. デフォルトパラメータ

デフォルトのパラメータは、実際には C++ によって補完された C 言語のピットです。

4.1 デフォルトパラメータの概念

デフォルトパラメータとは、関数の宣言または定義時に、関数のパラメータのデフォルト値(デフォルト値)を指定することです。関数を呼び出すとき、実パラメータが指定されていない場合は仮パラメータのデフォルト値が採用され、それ以外の場合は指定された実パラメータが使用されます。

以下の例では、
画像の説明を追加してください
Func 関数を 2 回呼び出します (指定されたパラメータ a のデフォルト値は 0)。操作の結果は次のとおりです
ここに画像の説明を挿入

4.2 デフォルトパラメータの分類

すべてのデフォルトパラメータ、
画像の説明を追加してください
ここに画像の説明を挿入
実行結果を上の図に示します。

· 準デフォルトパラメータ
画像の説明を追加してください
ここに画像の説明を挿入
に関する注意事項

  1. 準デフォルトのパラメータは、右から左に順番に指定する必要があり、交互に指定することはできません。
  2. デフォルトパラメータは関数宣言と定義の両方に使用できません
    ここに画像の説明を挿入
  3. デフォルト値は定数またはグローバル変数である必要があります
  4. C言語はサポートしていません(コンパイラはサポートしていません)

おすすめ

転載: blog.csdn.net/weixin_69423932/article/details/132245859