技術共有

C 入門のための基本 (1)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

皆さん、Pirate Cat Ou のブログへようこそ——

長い休みを経て、引き続き勉強を頑張っていきましょう!

目次

1.namespace ネームスペース

名前空間の存在価値:

名前空間の定義:

名前空間の使用法:

2.C++入出力関数

使用:

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

4. 関数のオーバーロード

結論:


1.namespace ネームスペース

名前空間の存在価値:

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

つまり、同じプロジェクト内に同じ名前の変数が複数ある場合、名前の衝突や名前汚染を防ぐことができ、区別も容易になります。大規模プロジェクトの開発には欠かせない存在と言えるでしょう。

名前空間の定義:

Namespace は、名前空間のキーワードです。キーワードの後に​​名前空間の名前を追加し、範囲を制限するには、{} を追加します。

  1. namespace hdmo
  2. {
  3. int a = 1;
  4. }

知らせ: 構造体とは異なり、関数と同様に、名前空間の最後の ' } ' の後に ' ; ' を追加する必要はありません。

ネームスペースの本質は、グローバル スコープから独立したドメインを作成することです。すべての関数にスコープがあるのと同じように、各関数のパラメーターのスコープは関数のスコープ内にあります。それぞれの名前空間についても同様です。名前空間内の関数や変数などのスコープは、名前空間の限られた範囲内にあり、名前空間を呼び出して使用する必要があります。, しかし、注意しなければならないのは、名前空間内の関数変数などにはグローバルなライフサイクルがあります

ネームスペースはグローバル スコープでのみ定義でき、ネストすることもできます。

同じプロジェクト内で、同じ名前の名前空間は同じ名前空間とみなされます。

  1. namespace hdmo
  2. {
  3. int a = 1;
  4. }
  5. namespace hdmo
  6. {
  7. int b = 1;
  8. }

現時点では、2 つの hdmo は同じ名前空間を表します。

C++ の標準ライブラリは、他の言語の関数との競合を防ぐために std (standard) という名前空間に格納されます。これが、C++ プログラムに基本的に含まれる理由です。

using namespace std;

C++ 標準ライブラリを含めるだけです。

名前空間の使用法:

ネームスペースはドメインであるため、その関数変数やその他の内容を外部で使用したい場合は、構造体のような演算子を使用してこの操作を実現する必要があります。

名前空間の呼び出し演算子は 2 つのコロンです::

  1. #include <stdio.h>
  2. namespace hdmo
  3. {
  4. int a = 1;
  5. }
  6. int a = 2;
  7. int main()
  8. {
  9. printf("%dn", a);
  10. printf("%dn", ::a);
  11. printf("%dn", hdmo::a);
  12. return 0;
  13. }

出力結果から、:: の前が空の場合、デフォルトでグローバル スコープの変数が呼び出されることがわかります。

名前空間で変数や関数などを使用するには、次の 3 つの方法があります。

1.一回の訪問: :: を使用すると、名前空間内の変数または関数に個別にアクセスできます。これが最も安全な使用方法です。

2.単一拡張 : 変数または関数を単独で展開するには、using を使用します。展開後、そのスコープはグローバル スコープになり、名前空間によって制限されなくなります。この方法は、競合のない一般的な条件下で使用することをお勧めします。

3.完全に拡張された: 指定されたすべての名前空間を直接展開します。プロジェクトでの使用は推奨されません。小規模なプログラムでは使用できます (C++ 標準ライブラリは完全に展開されるため、cin とcout、接頭辞 std::) は必要ありません

2.C++入出力関数

C 言語の入力ステートメントと出力ステートメントはそれぞれ scanf と printf です。C++ は C 言語の入力ステートメントと出力ステートメントと互換性がありますが、独自の入力関数と出力関数、つまり cin と cout もあります。

cin 関数と cout 関数を使用するには、以下を含める必要があります。<iostream>標準入出力ストリーム ライブラリ。C++ 標準関数ライブラリを含める必要があります。

  1. #include <iostream>
  2. using namespace std;

使用:

cin を使用する場合は、「&gt;&gt;」を使用して入力します。

cout を使用する場合は、「&lt;&lt;」を使用して出力します。

&lt;&lt; はストリーム挿入演算子、&gt;&gt; はストリーム抽出演算子 (&lt;&lt; と &gt;&gt; は C 言語の左シフト演算子と右シフト演算子も表します)

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 0;
  6. cin >> a;
  7. cout << a << endl;
  8. printf("%dn", a);
  9. return 0;
  10. }

最初は endl を改行 'n' として理解することができます。基本的な部分についてはあまり説明せず、今後の研究で追加します。

上記のコードから、cin と cout は変数の入出力形式を制御するために scanf や printf のように %d、%c などを使用していないことがわかります。cin と cout は変数とデータのタイプを自動的に識別できます、比較的便利な場所です。

VS2022 環境では、上記のコードには次のコードは含まれません。<stdio.h> 、VS では scanf 関数と prinf 関数を使用することもできます。<iostream>間接的に含まれる<stdio.h>なので、直接使用できますが、他のコンパイル環境に含める必要がある場合があります。<stdio.h> 。

制御精度などの演算を実現したい場合は、C言語の入出力メソッドを直接使用することをお勧めします。この演算をC++で実装するのはより面倒です。

scanf と printf は cin と cout よりも高速であることに注意してください。競合では、scanf と printf を直接使用して、実行時間の滞りを解消できます。ただし、この記事ではいいえ。説明はまだ。

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. // 在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码
  6. // 可以提⾼C++IO效率
  7. ios_base::sync_with_stdio(false);
  8. cin.tie(nullptr);
  9. cout.tie(nullptr);
  10. return 0;
  11. }

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

デフォルトパラメータは、関数を宣言または定義するときに関数パラメータにデフォルト値を与えるもので、デフォルトパラメータに値が渡されない場合、値が渡された場合は、渡された値が使用されます。値が使用されます。

デフォルト パラメータはフル デフォルトとセミ デフォルトに分けられます。フル デフォルトはすべての仮パラメータにデフォルト値が与えられることを意味し、セミデフォルトは一部の仮パラメータにデフォルト値が与えられることを意味します。また、C++ では、準デフォルトのパラメータは右から左に連続してデフォルト設定する必要があり、間隔を置いてデフォルト値にジャンプすることはできないと規定されています。

  1. #include <iostream>
  2. using namespace std;
  3. namespace hdmo
  4. {
  5. //全缺省
  6. int Fun1(int x = 0, int y = 0)
  7. {
  8. return x + y;
  9. }
  10. //半缺省
  11. int Fun2(int x, int y = 0)
  12. {
  13. return x + y;
  14. }
  15. }
  16. int main()
  17. {
  18. cout << hdmo::Fun1() << endl;//全缺省可以不传参
  19. cout << hdmo::Fun1(1) << endl;
  20. cout << hdmo::Fun1(1,1) << endl;
  21. /*
  22. cout << hdmo::Fun2() << endl;//半缺省不能不传参
  23. */
  24. cout << hdmo::Fun2(2) << endl;
  25. cout << hdmo::Fun2(2,2) << endl;
  26. return 0;
  27. }

上記のコードの結果は次のようになります。

セミデフォルトでは、通常のパラメータが左側、デフォルトのパラメータが右側となるように、右から左にデフォルト パラメータの定義と連続性を確保する必要があります。

4. 関数のオーバーロード

関数のオーバーロードとは、同じ関数名を持つ複数の関数が同時に存在し、同じ関数名が同時に複数の関数を表すことを意味します。これはオーバーロードです。

それらの違いはパラメータの型と数によって決まり、戻り値の型とは関係ありません。同じ名前で戻り値の型が異なるだけの 2 つの関数はオーバーロードできません。

  1. #include <iostream>
  2. using namespace std;
  3. namespace hdmo
  4. {
  5. int Add(int x, int y)
  6. {
  7. return x + y;
  8. }
  9. double Add(double x, int y)
  10. {
  11. return x + y;
  12. }
  13. double Add(int x, double y)
  14. {
  15. return x + y;
  16. }
  17. double Add(double x, double y)
  18. {
  19. return x + y;
  20. }
  21. }
  22. int main()
  23. {
  24. using hdmo::Add;
  25. cout << Add(1, 1) << endl;
  26. cout << Add(1.1, 1) << endl;
  27. cout << Add(1, 1.1) << endl;
  28. cout << Add(1.1, 1.1) << endl;
  29. return 0;
  30. }

結果は次のとおりです。

上記のコードから、オーバーロードを使用すると関数をより便利に使用できることがわかります。 C 言語では、上記の効果を実現するために、4 つの異なる関数名を使用して関数を定義する必要がありますが、C++ のオーバーロードを使用すると、1 つの名前を区別する必要がないため、すべての加算関数を統一できます。使用するときは直接使用するだけで、非常に便利です。

結論:

C++ 入門の基礎に関するこの記事はここで終了します。この後、その他の基本的な知識について説明していきます。引き続き、アドバイスをお願いします。

不備がある場合は、プライベートメッセージまたはコメント欄で指摘してください。

ホームページ:海賊猫王-CSDN ブログ

こちらが小さなカモメです!また会いましょう~(* ̄︶ ̄*)~