ホームページ  >  記事  >  バックエンド開発  >  C++の基礎知識

C++の基礎知識

angryTom
angryTomオリジナル
2019-10-26 10:48:526010ブラウズ

C++の基礎知識

c 基本

C は、1979 年に Bell の Bjarne Stroustrup によって開発された中間言語です。設計と開発は 1979 年に始まりました。研究室。 C は、C 言語をさらに拡張および改良したオブジェクト指向プログラミング言語です。 C は、Windows、MAC オペレーティング システム、UNIX のさまざまなバージョンなど、さまざまなプラットフォーム上で実行されます。 C 言語はプロセス指向言語であり、これに基づいてオブジェクト指向および汎用プログラミング機構が追加されているため、大規模および中規模のプログラムの開発に適しています。ただし、C は効率を犠牲にすることはなく、高度な機能を使用しない場合、その効率は C 言語とほぼ同じです。

推奨学習: c マニュアルチュートリアル

以下に c の基礎知識をまとめます。お役に立てば幸いです。

1. C の基本的なデータ型は何ですか?

答え: 整数、浮動小数点、void の 3 種類です。

2. 整数にはいくつかの形式がありますが、さまざまな形式の違いは何ですか?

回答: 整数型には、整数、文字、およびブール値の算術型が含まれており、これらは修飾子に従って 13 の形式に細分されます。主な違いは、型名、長さ、および表現範囲に反映されます。

3. C の定数とは何ですか?

回答: 整数定数、浮動小数点定数、文字定数、文字列定数、エスケープ文字定数、アドレス定数の 6 種類の定数です。

4. 定数と変数の違いは何ですか?

回答: (1) 定数の値は変更できませんが、変数の値は変更できます; (2) 定数は定義時に初期化する必要があり、変数は初期化されます。定義時に初期化する必要がない; (3) 定数が見つからない; アドレスは定数ポインタにのみ割り当てられ、変数のアドレス指定が可能; (4) 定数の方がコンパイルと実行の効率が高い;

5. 演算子の分類は何ですか?

答え: (1) オペランドによる: 単項演算子、二項演算子、三項演算子; (2) 関数による: 算術演算子、関係演算子、論理演算演算子、ビット演算子、代入演算子、インクリメントおよびデクリメント演算子、矢印演算子、条件演算子、sizeof 演算子、カンマ演算子。

6. 自己インクリメントと自己デクリメントの操作前と操作後の違いは何ですか?

回答: 前者のインクリメントおよび自己デクリメント演算の優先順位は代入演算子 (=) よりも高く、後者のインクリメントおよび自己デクリメント演算の優先順位は代入演算子よりも低くなります。後者のインクリメントおよび自己デクリメント操作後の式は、 式の値は変わりません。

7. ポインターと変数の増加と減少の違いは何ですか?

回答: 変数のインクリメントとデクリメントは変数の値を変更し、ポインタのインクリメントとデクリメントはポインタが指すアドレスを変更します。

8.左辺値と右辺値とは何ですか?

回答: 変数は左辺値であり、代入ステートメントの左側に置くことができますが、数値リテラルは右辺値であり、代入できません。

9. 変数の初期化方法は何ですか?

回答: 直接初期化とコピー初期化の 2 種類があります。直接初期化はより柔軟で、より効率的に実行されます。

10. 変数の宣言と定義とは何ですか?

回答: 変数宣言の主な目的は、変数の型と名前を示すことであり、変数定義の主な目的は、それらが同じである場合に記憶領域を割り当てることです。

11. C にはどのような種類のスコープがありますか?

答え: グローバル スコープ、ローカル スコープ、ステートメント スコープの 3 種類です。

12. 変数の保存タイプは何ですか?

答え:自動型、静的型、レジスタ型、外部型の4種類です。

13. C と C の違いは何ですか?

回答: C 言語は構造化プログラミング言語で、プロセス指向で実装プロセスを考慮しますが、C 言語はオブジェクト指向でプログラム全体のモデルを考慮します。

14. マクロ定義と演算子の違いは何ですか?

回答: マクロ定義は C の前処理コマンドの 1 つです。これは、計算や式の解決を実行せず、メモリやコンパイル時間を占有しない置換操作です。

15. 仮想関数と純粋仮想関数の特徴は何ですか?

回答: 仮想関数は基本クラスの非静的メンバー関数である必要があり、そのアクセス許可は保護またはパブリックにすることができます。純粋な仮想関数は仮想関数のサブセットであり、純粋仮想関数を含むクラスは抽象クラスであるため、オブジェクトを生成できません。

16. 純粋仮想関数の使用方法は?

回答: 純粋仮想関数は、意味のない実装を定義するために使用され、具体的な実装のために派生クラスに引き渡す必要がある抽象クラスのメソッドに使用されます。

17. ポインタとは何ですか?

回答: ポインタは、メモリ アドレスを格納するために使用される変数です。単一のオブジェクトのアドレスを指します。void ポインタ タイプに加えて、ポインタのデータ タイプは次のとおりである必要があります。アドレスを指す変数のデータ型と一致していること。

18. const オブジェクトへのポインターと const ポインターの違いは何ですか?

回答: const ポインター自体の値は変更できませんが、ポインターを使用してそれが指すオブジェクトの値を変更することはできます。const 変数へのポインターは値を変更できません。それが指す const 変数ですが、ポインター自体は再割り当てできます。

19. 配列ポインターとポインター配列の違いは何ですか?

回答: 配列ポインタは配列を指すポインタ変数です。ポインタ配列はポインタ要素のみを含む配列であり、その要素は同じ型の異なるオブジェクトを指すことができます。

20. 関数ポインタとは何ですか?

回答: 関数ポインタは、関数の記憶領域アドレスを指すポインタです。関数ポインタに値を代入し、関数ポインタを通じて関数を呼び出すことができます。

21. 参照渡しと値渡しの違いは何ですか?

回答: 値渡しは値のコピーを渡し、仮パラメータに対する関数の操作は実際のパラメータの値には影響しません。参照渡しは参照オブジェクトのメモリ アドレスを渡します。 , そして、仮パラメータに対する関数の操作は実パラメータの値には影響しません。この操作は実パラメータの値に影響し、仮パラメータの値が変化すると実パラメータの値も変化します。

22. ポインターと参照の違いは何ですか?

回答: (1) 参照は逆参照する必要はありませんが、ポインタは逆参照する必要があります; (2) 参照は定義時に一度初期化され、その後は不変になりますが、ポインタは変更可能です。 (3) 参照を空にすることはできません。ポインタは空にすることができます。 (4) プログラムはポインタ変数にメモリ領域を割り当てますが、参照はメモリ領域を割り当てる必要がないため、ポインタのインクリメント操作は自動です。ポインタ変数のインクリメントであり、参照自動インクリメント操作は変数値の自動インクリメントです。

23. オブジェクト指向とプロセス指向の違いは何ですか?

回答: プロセス指向はアルゴリズムによって駆動されるプロセス中心のプログラミングの考え方であり、オブジェクト指向はメッセージによって駆動されるオブジェクト中心のプログラミングの考え方です。プロセス指向プログラミング言語の構成: プログラム = アルゴリズム データ、オブジェクト指向プログラミング言語の構成: プログラム = オブジェクト メッセージ。

24. オブジェクト指向の特徴は何ですか?

回答: オブジェクト対応には、カプセル化、継承、ポリモーフィズムという 3 つの要素があります。オブジェクト指向におけるすべてのオブジェクトはクラスに分類できます。

25. クラスと構造体の違いは何ですか?

回答: (1) 構造体はスタックに格納され、クラスのインスタンス化はスタックまたはヒープに格納できます。 (2) 構造体の実行効率は、クラスのそれ; (3) 構造体にはデストラクタはありませんが、クラスにはデストラクタがあります; (4) 構造体は継承できませんが、クラスは継承できます。

26. 静的メンバーにアクセスするにはどうすればよいですか?

回答: 静的メンバーは、クラスのインスタンスを作成せずに、クラス名を通じて直接呼び出すことができます。また、クラスのインスタンスを通じて呼び出すこともできますが、最下位層は依然としてクラス名を呼び出すため、これはお勧めできません。クラスの静的メソッドは、クラスの静的メンバーのみにアクセスできます。

27. ポリモーフィズムとは何ですか?

回答: ポリモーフィズムとは、サブクラス オブジェクトを親クラス変数に割り当てることです。親クラス変数は、コンパイル時と実行時に異なる特性を示します。

28. C でポリモーフィズムを実装するにはどうすればよいですか?

回答: ポリモーフィズムには、動的ポリモーフィズム、静的ポリモーフィズム、関数ポリモーフィズム、マクロ ポリモーフィズムが含まれます。私たちがよく言うポリモーフィズムは、継承メカニズムと仮想ポリモーフィズムに基づく動的ポリモーフィズムを指します。 。

29. 派生クラスと基本クラス間の変換?

回答: 派生クラスはいつでも基本クラスの参照型に変換できます。基本クラスから派生クラスへの変換には、安全な場合にキャストを使用する必要があります。

30. バーチャル メンバーとは何ですか?またその役割は何ですか?

回答: 仮想関数の機能は、動的バインディングを実現することです。プログラムは、仮想関数名の前にキーワード virtual を見つけると、自動的にそれを動的バインディング、つまり動的として扱います。プログラム実行時の選択 適切なメンバー関数。

31. C のカバーと非表示の概要?

回答: (1) 上書きとは、サブクラスと親クラスに同じ関数名とパラメータを持つ関数があり、親クラスの関数が仮想関数であることを意味します。(2) ) 隠蔽 サブクラスと親クラスに、同じ関数名でパラメータが異なる関数が存在することを意味します このとき、親クラスの関数が仮想関数であるかどうかに関わらず、親クラスの関数は隠蔽されます。は、同じ関数名とパラメータを持つ関数です。このとき、親クラス関数は、親クラス関数が仮想関数ではない場合にのみ非表示になります。

32. ディープ コピーとシャロー コピーとは何ですか?

回答: クラスにリソースがある場合、このクラスのリソースがコピーされるとき、それはディープ コピーと呼ばれます。オブジェクトにリソースがあるが、コピー プロセス中にリソースがコピーされない場合、ディープ コピーと呼ばれます。浅いコピーです。

33. コピー コンストラクターとは何ですか?いつ呼び出されますか?

回答: コピー コンストラクターは、以下に基づいて他のオブジェクトの構築を完了するためにコンパイラーによって呼び出されます。同じクラスと初期化。コピー コンストラクターが使用される状況は 3 つあります: (1) オブジェクトが値によって関数本体に渡される; (2) オブジェクトが値によって関数から返される; (3) オブジェクトが別のオブジェクトを通過する必要があるオブジェクトの初期化。

34. 型変換コンストラクターとは何ですか?

回答: クラスのコンストラクターにはパラメーターが 1 つだけあります。パラメーターの型はクラスの型ではなく、他の型です。このコンストラクターは型変換コンストラクターと呼ばれ、処理に使用できます。異なるドメインの同じデータ値。

35. C はパラメータの数が不確実な関数をサポートしていますか?

回答: C は、隠しパラメーター メカニズムを通じて、不確実なパラメーターを持つ関数をサポートできます。

36. インライン関数とは何ですか?

回答: クラス宣言内で宣言または定義されたメンバー関数はインライン関数と呼ばれます。インライン関数内ではループ文やスイッチ文は使用できません。

37. 参照仮パラメータと非参照仮パラメータの違いは何ですか?

回答: 参照パラメータはパラメータ変数のアドレスを渡すもので、実パラメータの値は仮パラメータで関数を呼び出すことで変更できます。

38. 参照パラメータの使用にはどのような問題がありますか?

回答: 非 const 型の参照パラメーターを呼び出す場合、const 参照を使用して仮パラメーター関数を呼び出す場合、実際のパラメーターは const 型であってはならず、2 つの型が一貫している必要があります。 、実パラメータが ではない場合 変数または型が一致しない場合、関数は実パラメータの値を格納するための名前のない一時変数を作成し、この仮パラメータを一時変数への参照として使用します。

39. ポインタパラメータと参照パラメータの違いは何ですか?

回答: ポインタ パラメータとは、関数のパラメータがポインタであることを意味します。参照パラメータのように関数呼び出しを通じて実際のパラメータの値に影響を与えることはありませんが、関数のオブジェクトは変更されます。呼び出し後の実際のパラメータ。プログラムの可読性が低下するため、プログラム内でのポインター パラメーターの使用はできるだけ少なくすることをお勧めします。

40. 静的関数とは何ですか?静的関数を使用するにはどうすればよいですか?

回答: 静的関数は、静的修飾子で変更された関数です。静的関数にはこのポインターがなく、静的変数のみにアクセスできます。クラス内の関数呼び出しの結果がオブジェクト データ メンバーにアクセスしたり変更したりしない場合は、そのようなメンバーを静的メンバー関数として宣言することをお勧めします。

41. 関数のオーバーロードとスコープ?

回答: 関数のオーバーロードとは、同じスコープ内にある同じ名前で異なるパラメーター リストを持つ複数の関数を指します。

42. 関数のオーバーロード時に実際のパラメーターの型変換を実装するにはどうすればよいですか?

回答: 関数のオーバーロードを照合する場合、まず標準変換によって照合が行われます。次に、クラス型変換を使用して一致を実現します。

43. 関数テンプレートとは何ですか?

回答: 関数テンプレート テクノロジとは、テンプレート テクノロジを使用してパラメータ化された型の非メンバー関数を定義することを指します。これにより、プログラムは異なるパラメータ型を使用して同じ関数を呼び出すことができます。

44. クラス テンプレートとは何ですか?

回答: クラス テンプレートは、テンプレート テクノロジを使用して、他のデータ型を管理できる一般的なデータ型を記述するクラスです。クラス テンプレート テクノロジは、他のタイプ (キュー、リンク リスト、スタックなど) を含むコンテナ クラスを作成するためによく使用されます。

45. 汎用プログラミングとは何ですか?

回答: ジェネリック プログラミングとは、特定のクラスの実装から独立した方法でコードを記述し、さまざまな型に共通の実装を提供することです。

46. C で汎用プログラミングを実装するにはどうすればよいですか?

回答: C での汎用プログラミングの実装は、C のテンプレート テクノロジを使用して、主に関数テンプレートとクラス テンプレートを設計することによって実現されます。

以上がC++の基礎知識の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。