C++ インタビューの質問と回答 (2024)

C++ インタビューの質問と回答 (2024)

C++ – プログラマーにとって欠かせない、常にお気に入りのプログラミング言語。 80年代半ばのものとして、今でも通用します。汎用のオブジェクト指向プログラミング言語は、コーディングの際にほぼ毎回広く使用されます。その結果、一部の職務では、C++ に堪能であることが求められます。などのトップIT企業が活用しています。 Evernote、LinkedIn、マイクロソフト、オペラ、NASA 、 そして メタ その信頼性、パフォーマンス、幅広い設定で使用できるためです。したがって、これらの企業に入社するには、次のことを徹底的に行う必要があります C++ の面接での質問トップ 50 そうすることで、採用担当者の前ではあなたが専門家であるように見える可能性があります。

新人と経験者向けの C++ 面接での質問トップ 50 (2022)

面接に備えていただけるよう、 C++ 面接での質問トップ 50 初心者、中級者、経験者 多国籍企業のトップに立つためには、必ずこれを通過しなければなりません。

新人向けの C++ 面接の質問

1. C++ とは何ですか? C++ の利点は何ですか?

C++ は、C に欠けていた管轄区域を克服するために導入されたオブジェクト指向プログラミング言語です。オブジェクト指向とは、次の概念で動作することを意味します。 多態性 継承 抽象化 カプセル化 オブジェクトとクラス

C++ の利点 :

  1. C++ は OOPs 言語であり、データがオブジェクトとして考慮されることを意味します。
  2. C++ はマルチパラダイム言語です。簡単に言うと、プログラムのロジックや構造、手順をプログラミングできるということです。
  3. メモリ管理は動的なメモリ割り当てを可能にするため、C++ の重要な機能です。
  4. これは中レベルのプログラミング言語であり、ゲーム、デスクトップ アプリケーション、ドライバー、カーネルを開発できることを意味します。

詳細については、記事を参照してください – C++ の利点は何ですか?

2. C++ にはどのようなデータ型がありますか?

C++ のデータ型

C++ のさまざまなデータ型

詳細については、以下を参照してください。 ' 標準」 Standard とも呼ばれます。または、名前空間として解釈できます。コマンド 名前空間 std を使用する 以下にすべてを追加するようにコンパイラーに通知します。 標準名前空間 そしてそれらを教え込みます グローバル名前空間 。グローバル名前空間のこのすべての浸透は、私たちが使用することに利益をもたらします コート そして 食べる 使うことなく std::_operator_。

詳細については、以下を参照してください。 名前空間と標準

4. C++ における参照とは何ですか?

変数を参照として記述すると、既存の変数の別名になります。簡単に言えば、参照変数は、参照変数に加えられた変更が既存の変数に反映されることを念頭に置いて、既存の変数の別の名前付き変数です。参照変数の前には 「&」 シンボル。

構文:

int GFG = 10;  // reference variable int& ref = GFG; 

詳細については、以下を参照してください。 C++ での参照

5. 「値による呼び出し」と「参照による呼び出し」とはどういう意味ですか?

このプログラミング言語では、関数を呼び出すために 2 つの方法があります。 値による呼び出し そして 参照による呼び出し

値による呼び出し

参照による呼び出し

変数のコピーが渡されます。 基本的には変数そのものを渡します。
変数をコピーして値を送信して関数を呼び出します。 渡された変数のアドレスを送信して関数を呼び出します。
関数内で行われた変更は、関数の外部の変数に反映されることはありません。つまり、値による呼び出しでは、元の値が変更されることはありません。 関数内で行われた変更は、渡された関数の関数の外側で確認できます。つまり、参照による呼び出しでは元の値が変更されます。
渡された実パラメータと仮パラメータは、異なるメモリ場所に保存されます。そのため、Call by Valueにするのは少々メモリ不足です 渡された実パラメータと仮パラメータは同じメモリ場所に保存されます。したがって、参照による呼び出しのメモリ効率が少し向上します。

詳細については、を参照してください。 値による呼び出しと参照による呼び出しの違い

6. C++でトークンを定義する

トークンは、コンパイラーが理解できるプログラムの最小の個別要素です。トークンは次のもので構成されます。

  1. キーワード – コンパイラにとって特別な意味を含むもの
  2. 識別子 – 独自の価値/アイデンティティを保持しているもの
  3. 定数 – プログラム全体を通じてその価値が決して変わらないこと
  4. 文字列 – 同種のデータシーケンスが含まれる
  5. 特殊記号 – 何らかの特別な意味があり、他の目的に使用することはできません。例えば: [] () {}, ; * = #
  6. オペレーター – オペランドの演算を実行する人

詳細については、以下を参照してください。 C++ のトークン

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

C

C++

手続き型プログラミング言語です。簡単に言うと、クラスとオブジェクトをサポートしていません。 これは、手続き型プログラミング言語とオブジェクト指向プログラミング言語の両方が混合されたものです。簡単に言うと、クラスとオブジェクトをサポートします。
ポリモーフィズム、データ抽象化、カプセル化、クラス、オブジェクトなどの OOP の概念はサポートしません。 データのすべての概念をサポートします
関数と演算子のオーバーロードはサポートされていません 関数と演算子のオーバーロードをそれぞれサポートします
関数駆動型言語です オブジェクト駆動型言語です

詳細については、以下を参照してください。 C と C++ の違い

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

構造体

クラス

構造体のメンバーはデフォルトで常にパブリック モードです クラスのメンバーは、プライベート、保護、およびパブリック モードになれます。
構造体は値型です。値はメモリ内にのみ保持されます。 クラスは参照型です。オブジェクトの参照をメモリ内に保持します。
構造体のメモリはスタックとして保存されます クラス内のメモリはヒープとして保存されます。

詳細については、を参照してください。 構造体とクラスの違い。

9. リファレンスとポインタの違いは何ですか?

参照

ポインタ

参照の値を再割り当てすることはできません ポインタの値は再割り当て可能
それは決して保持できません ヌル のエイリアスになるには既存の値が必要なので、値を指定します。 保持したり、指したりできます。 ヌル 値であり、 nullptr または ヌルポインタ
配列では機能しません 配列を扱うことができます
クラス/構造体のメンバーにアクセスするには、「」を使用します。 ' クラス/構造体のメンバーにアクセスするには、「」を使用します。 -> '
参照のメモリ位置に簡単にアクセスしたり、直接使用したりできます。 逆参照を使用する必要があるため、ポインタのメモリ位置には簡単にアクセスできません。 * '

詳細については、を参照してください。 リファレンスとポインタの違い

10. 関数のオーバーロードと演算子のオーバーロードの違いは何ですか?

関数のオーバーロード

演算子のオーバーロード

基本的に関数をさまざまな方法で定義することです。つまり、関数を呼び出す方法がたくさんある、または簡単に言えば、同じ関数の複数のバージョンがあるなどです。 基本的には、演算子の既存の意味に特別な意味を与える練習をすること、または簡単に言えば、事前に再定義された意味を再定義することです。
パラメーター化された関数は関数のオーバーロードの良い例です。関数の引数またはパラメーターを変更するだけで、関数がさまざまな目的に役立つようになります。 ポリモーフィズムは、割り当てクラスのオブジェクトとして演算子をオーバーロードする良い例です。さまざまな目的でさまざまなクラスによって使用および呼び出すことができます。

関数のオーバーロードの例:

  1. int GFG(int X, int Y);
  2. int GFG(char X, char Y);

演算子のオーバーロードの例:

  1. int GFG() = X() + Y();
  2. int GFG() = X() – Y();

詳細については、以下を参照してください。 演算子のオーバーロード そして 関数のオーバーロード

11. 配列とリストの違いは何ですか?

配列

リスト

配列は、固定の場所またはサイズに格納された同種のデータ型の連続したメモリ位置です。 リストは、ポインターを使用して相互にリンクまたは接続されている古典的な個別の要素であり、固定サイズはありません。
配列は本質的に静的です。 リストは本質的に動的です
リンクされたリストよりもメモリの使用量が少なくなります。 値とポインタのメモリ位置を保存する必要があるため、より多くのメモリを使用します。

詳細については、以下を参照してください。 配列とリスト

12. while ループと do-while ループの違いは何ですか?

While ループ

do-while ループ

While ループは、エントリ制御ループとも呼ばれます。 do-while ループは終了制御ループと呼ばれます
条件が満たされない場合、ループ内のステートメントは実行されません。 条件が満たされない場合でも、ループ内のステートメントは少なくとも 1 回実行されます。

while ループ:

while(条件)

{実行されるステートメント;};

do-while ループの場合:

する {

実行されるステートメント。

while(条件または式);

詳細については、を参照してください。 while ループと do-while ループの違い

13. 接頭辞と接尾辞の違いについて話し合いますか?

接頭語

接尾辞

これは単に演算子をオペランドの前に置くことを意味します。 これは単にオペランドの後に演算子を置くことを意味します
前にそれ自体が実行されます '; ' その後自動的に実行されます '; '
プレフィックス++の結合性は右から左です postfix ++の結合性は左から右です

詳細については、を参照してください。 接頭辞と接尾辞の違い

14. new と malloc() の違いは何ですか?

新しい

malloc()

new は操作を実行する演算子です malloc は値を返したり受け取ったりする関数です
new はコンストラクターを呼び出します malloc はコンストラクターを呼び出すことができません
new は演算子であるため、malloc よりも高速です malloc は関数であるため new よりも遅い
new は正確なデータ型を返します malloc は void* を返します

詳細については、以下を参照してください。 new と malloc() の違い

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

仮想機能

純粋な仮想機能

仮想関数は、別の派生クラスで再定義できる基本クラスのメンバー関数です。 純粋仮想関数は、基本クラスでのみ宣言され、抽象クラスになるのを防ぐために派生クラスで定義される基本クラスのメンバー関数です。
仮想関数は、それぞれの基本クラスに定義があります。 Pure Virtual Function には定義がなく、純粋な指定子で初期化されます (= 0)。
基本クラスには、表現またはインスタンス化できる仮想関数があります。簡単に言えば、そのオブジェクトは作成できます。 純粋な仮想関数を持つ基底クラスは、表現またはインスタンス化できない抽象クラスになります。簡単に言えば、そのオブジェクトを作成できないことを意味します。

詳細については、を参照してください。 仮想関数と純粋仮想関数の違い

16. C++ のクラスとオブジェクトとは何ですか?

クラスはユーザー定義のデータ型であり、すべてのメンバー関数とデータ メンバーが需要と要件に従ってカスタマイズされ、さらに、これらすべてに、 物体 。ユーザー定義のデータ型を宣言するには、キーワードを使用します。 クラス。

オブジェクトはクラスのインスタンスであり、値と状態を持つエンティティです。簡単に言えば、触媒として、またはクラスのメンバーを表すために使用されます。異なるパラメータが含まれる場合もあれば、まったく含まれない場合もあります。

注記: クラスは、オブジェクトによって使用される関数を定義する設計図です。

詳細については、こちらを参照してください クラスとオブジェクトとは何ですか

17. 関数オーバーライドとは何ですか?

基本クラスですでに存在または宣言されている同じ名前、同じ引数またはパラメーター、および同じ戻り値の型の関数が派生クラスで使用される場合、関数オーバーライドと呼ばれます。これは、実行時ポリモーフィズムまたはレイト バインディングの例であり、オーバーライドされた関数が実行時に実行されることを意味します。

詳細については、以下を参照してください。 C++ での関数のオーバーライド

18. C++ におけるさまざまな OOP の概念は何ですか?

  • クラス : ユーザー定義のデータ型です
  • オブジェクト : クラスのインスタンスです
  • 抽象化: 必要な部分だけを見せるテクニックです
  • カプセル化: データを単一ユニットにラップする
  • 継承: あるクラスが別のクラスからプロパティや特性を派生する機能
  • 多態性: ポリモーフィズムは、同じものの多くの形式として知られています

詳細については、以下を参照してください。 C++ におけるさまざまな OOP の概念

19. 継承について説明する

クラスが別のクラスからプロパティや特性を派生できる機能は、継承として知られています。簡単に言うと、既存のクラスを変更せずに再利用および拡張するシステムまたは手法です。

詳細については、以下を参照してください。 継承

20. 多重継承を使用する必要があるのはどのような場合ですか?

多重継承とは、派生クラスが 2 つ以上の基本/親クラスを継承できることを意味します。これは、派生クラスが多数の属性/コントラクトを結合し、これらの属性/コントラクトから実装の一部またはすべてを継承する必要がある場合に役立ちます。現実の例として、親を考えてみましょう。親 A があなたの父親、親 B が母親、子供 C があなたです。

多重継承

多重継承

詳細については、以下を参照してください。 多重継承

21. 仮想継承とは何ですか?

仮想継承は、基本クラスのメンバー変数のコピーが 1 つだけ孫派生クラスに継承されるようにする手法です。簡単に言えば、仮想継承は、多重継承の状況に対処しているが、同じクラスの複数のインスタンスが継承階層に現れるのを防ぎたい場合に使用されます。

22. C++ におけるポリモーフィズムとは何ですか?

ポリモーフィズムは、同じもののさまざまな形式として知られています。簡単に言うと、ポリモーフィズムとは、メンバー関数を呼び出すオブジェクトの種類に応じて複数の形式でメンバー関数を表示できる機能であると言えます。

言い換えれば、男性は誰かの従業員、誰かの息子、誰かの父親、誰かの夫になることができるとも言えます。これは、ポリモーフィズムを現実の生活に投影する方法です。

ポリモーフィズムには 2 種類あります。

  1. コンパイル時のポリモーフィズム
    • 関数のオーバーロード
    • 演算子のオーバーロード
  2. 実行時のポリモーフィズム
    • 関数のオーバーライド
    • 仮想機能

詳細については、を参照してください。 ポリモーフィズム

23. C++ におけるポリモーフィズムにはどのような種類がありますか?

ポリモーフィズムには2種類あります

コンパイル時のポリモーフィズムまたは静的バインディング

このタイプのポリモーフィズムはプログラムのコンパイル時に実現され、その結果、実行時よりもわずかに高速になります。また、継承は関与しません。で構成されています さらに2つのテクニック :

関数のオーバーロード: 同じ名前でパラメータが異なる複数の関数がある場合、これは関数のオーバーロードと呼ばれます。

C++
// same name different arguments int GFG() {} int GFG(int a) {} float GFG(double a) {} int GFG(int a, double b) {} 


演算子のオーバーロード: 基本的には、演算子の既存の意味に特別な意味を与える練習をすること、または簡単に言えば、事前に再定義された意味を再定義することです。

C++
class GFG {  // private and other modes  statements public returnType  operator symbol(arguments){ statements } statements }; 

実行時のポリモーフィズムまたは遅延バインディング

実行時ポリモーフィズムは、実行時に関数が呼び出されるときに発生します。

関数のオーバーライド: 関数のオーバーライドは、基本クラスのメンバー関数が同じ引数と戻り値の型を使用して派生クラスで再定義されるときに発生します。

C++
// C++ program to demonstrate // Function overriding #include  using namespace std; class GFG { public:  virtual void display()  {  cout  < < 'Function of base class'  < < endl;  } }; class derived_GFG : public GFG { public:  void display()  {  cout  < < 'Function of derived class'  < < endl;  } }; int main() {  derived_GFG dg;  dg.display();  return 0; } 

出力:

Function of derived class 

詳細については、以下を参照してください。 さまざまな種類のポリモーフィズム

24. コンパイル時ポリモーフィズムと実行時ポリモーフィズムの比較

コンパイル時のポリモーフィズム

ランタイムポリモーフィズム

静的バインディングおよび早期バインディングとも呼ばれます。 動的バインディングおよび遅延バインディングとも呼ばれます。
コンパイル時の早い段階で実行がわかるため、高速です。 実行時に実行が分かるため、コンパイル時と比べて遅くなります。
これは、関数のオーバーロードと演算子のオーバーロードによって実現されます。 これは、仮想関数と関数のオーバーライドによって実現されます。

詳細については、以下を参照してください。 コンパイル時ポリモーフィズムと実行時ポリモーフィズム

25. C++ のコンストラクターについて説明します。

コンストラクターは、クラスのメンバー関数の特別なタイプであり、その名前は、コンストラクターが呼び出されたクラスの名前と同じであり、クラスのオブジェクトに値を初期化します。

コンストラクターには 3 種類あります。

A. デフォルトのコンストラクター: これは、引数やパラメーターを受け入れない最も基本的なタイプのコンストラクターです。呼び出されなくても、オブジェクトの作成時にコンパイラが自動的に呼び出します。

例:

C++
class Class_name { public:  Class_name() { cout  < < 'I am a default constructor'; } }; 


B. パラメータ化されたコンストラクタ: これは、引数またはパラメータを受け入れるコンストラクターの一種です。これらの引数はオブジェクトの作成時に初期化するのに役立つため、引数に値を渡して明示的に呼び出す必要があります。クラス名と同じ名前も付けられます。

また、コンストラクターをオーバーロードするためにも使用されます。

例:

C++
// CPP program to demonstrate // parameterized constructors #include  using namespace std; class GFG { private:  int x, y; public:  // Parameterized Constructor  GFG(int x1, int y1)  {  x = x1;  y = y1;  }  int getX() { return x; }  int getY() { return y; } }; int main() {  // Constructor called  GFG G(10, 15);  // Access values assigned by constructor  cout  < < 'G.x = '  < < G.getX()  < < ', G.y = '  < < G.getY();  return 0; } 

出力

G.x = 10, G.y = 15 

C. コンストラクターのコピー: コピー コンストラクターは、同じクラスの別のオブジェクトを使用してオブジェクトを初期化するメンバー関数です。また、Copy コンストラクターは、同じクラスのオブジェクトへの参照を引数として受け取ります。

例:

C++
Sample(Sample& t) { id = t.id; } 


詳細については、以下を参照してください。 コンストラクター

26. C++ のデストラクターとは何ですか?

デストラクターは、クラスのオブジェクトがスコープ外になったときにオブジェクトを削除するクラス内の関数のメンバーです。デストラクターは、クラスと同じ名前の前にチルダ (~) 記号が付きます。また、デストラクターは 下から上へ 上から下に従うコンストラクターとは異なります。

構文:

~constructor_name(); // tilde sign signifies that it is a destructor 

詳細については、以下を参照してください。 デストロイヤー

27. 仮想デストラクターとは何ですか?

基本クラス ポインター オブジェクトを使用して派生クラスのインスタンスまたはオブジェクトを破棄すると、仮想デストラクターが呼び出され、派生クラス オブジェクトまたはインスタンスによって割り当てられたメモリ領域が解放されます。

仮想デストラクターは、最初に派生クラスのデストラクターが呼び出されることを保証します。次に、基本クラスのデストラクターが呼び出されて、継承クラス内の両方のデストラクターによって占められていたスペースが解放され、メモリ リークが回避されます。クラスが多態性である場合は常に、デストラクターを仮想化することをお勧めします。

詳細については、以下を参照してください。 バーチャルデストロイヤー

28. デストラクターのオーバーロードは可能ですか? 「はい」の場合は説明し、「いいえ」の場合はその理由を教えてください。

簡単な答えは、 いいえ デストラクターをオーバーロードすることはできません。 C++ ではクラスごとにデストラクターのみを使用することが必須です。また、Destructor は引数をとらず、オーバーロードに役立つ可能性のあるパラメーターも持ちません。

C++ 面接の質問 – 中級レベル

29. ポインターに対してどの操作が許可されますか?

ポインタは、別の変数のアドレス位置を格納するために使用される変数です。ポインターに対して許可される操作は次のとおりです。

  1. ポインタのインクリメント/デクリメント
  2. ポインタへの整数の加算と減算
  3. 同じ型のポインタの比較

30. その目的は何ですか? 消去 オペレーター?

delete 演算子は、オブジェクトのメモリの割り当てを解除することによって、オブジェクトからすべての特性/プロパティを削除/削除するために使用されます。さらに、最終的には true または false を返します。簡単に言えば、新しい式によって作成された配列および非配列 (ポインター) オブジェクトを破棄または割り当て解除します。

C++
int GFG = new int[100]; // uses GFG for deletion delete[] GFG; 

詳細については、以下を参照してください。 演算子の削除

31. [] の削除と削除はどのように異なりますか?

消去[]

消去

配列全体を削除するために使用されます 単一のポインタのみを削除するために使用されます
のオブジェクトを削除するために使用されます。 新しい[]; このことから言えることは、 消去[] オブジェクトの配列を削除するために使用されます のオブジェクトを削除するために使用されます。 新しい; このことから言えることは、 消去 単一のオブジェクトを削除するために使用されます
必要なだけデストラクターを呼び出すことができます クラスのデストラクターを呼び出せるのは 1 回だけです

32. フレンドクラスとフレンド機能について何を知っていますか?

フレンド クラスは、フレンドとして宣言されているクラスのプロテクト変数とプライベート変数の両方にアクセスできるクラスです。

フレンドクラスの例:

C++
class Class_1st {  // ClassB is a friend class of ClassA  friend class Class_2nd;  statements; } class Class_2nd {  statements; } 


フレンド関数は、プライベート、保護、パブリック データ メンバー、または他のクラスのメンバー関数にアクセスするために使用される関数です。 friends キーワードで宣言されます。フレンド関数の利点は、クラスのスコープにバインドされず、クラス内で宣言されると、そのクラスのオブジェクトから呼び出すことができないことです。したがって、他の関数から呼び出すことができます。前述したすべての点を考慮すると、フレンド機能はグローバル機能であると言えます。

フレンド機能の例:

C++
class GFG {  statements;  friend dataype function_Name(arguments);  statements; } OR class GFG {  statements' friend int divide(10, 5);  statements; } 


詳細については、を参照してください。 フレンド関数とフレンドクラス

33. オーバーフローエラーとは何ですか?

オーバーフロー エラーは、数値が大きすぎてデータ型が処理できない場合に発生します。簡単に言うと、これは、定義された範囲では有効ですが、一致する/存在するはずの定義された範囲を超えるタイプのエラーです。

たとえば、int データ型の範囲は次のとおりです。 –2,147,483,648 2,147,483,647 サイズの変数を宣言すると 2,247,483,648 オーバーフローエラーが発生します。

34. スコープ解決オペレーターは何をしますか?

スコープ解決演算子は「」で表されます。 :: 「」の記号。その名前のように、この演算子はプログラム内のスコープの障壁を解決します。スコープ解決演算子は、スコープ外のメンバー関数またはグローバル変数を参照するために使用され、さらにプログラム内の隠蔽された変数または関数にアクセスすることもできます。

スコープ解決は、次のような大量のタスクに使用されます。

  1. 同名のローカル変数が存在する場合にグローバル変数にアクセスするには
  2. クラスの外で関数を定義するには
  3. 多重継承の場合
  4. 名前空間の場合

詳細については、以下を参照してください。 スコープ解決演算子

35. C++ アクセス修飾子とは何ですか?

クラスのメンバー (メンバー関数またはデータメンバー) に指定されるアクセス制限は、アクセス修飾子/指定子と呼ばれます。

アクセス修飾子には 3 つのタイプがあります。

  1. プライベート - クラス外からはアクセスも閲覧もできません
  2. 保護されています – アクセサーが派生クラスである場合にのみアクセスできます。
  3. 公共 - クラス外からもアクセス・閲覧可能

詳細については、以下を参照してください。 アクセス修飾子

36. main関数なしでプログラムをコンパイルできますか?

はい、main() なしでプログラムをコンパイルすることは絶対に可能です。たとえば、メインを定義するマクロを使用します。

C++
// C++ program to demonstrate the // a program without main() #include  #define fun main  int fun(void) {  printf('Geeksforgeeks');  return 0; } 

詳細については、以下を参照してください。 main関数を使わずにプログラムをコンパイルできますか

37. STLとは何ですか?

STLは標準テンプレートライブラリとして知られており、コンテナ、アルゴリズム、イテレータの4つのコンポーネントを提供するライブラリです。

C++ STL

詳細については、以下を参照してください。 C++ の STL

38. インライン関数を定義します。 C++ で再帰インライン関数を使用できますか?

インライン関数はリクエストの形式であり、関数がメイン関数本体にインライン化されるコンパイラへの命令ではありません。インライン関数は、関数の実行時間が呼び出し側関数から呼び出される関数への切り替え時間よりも短い場合、オーバーヘッドになる可能性があります。関数をインライン化するには、キーワードを使用します 列をなして 関数の呼び出しが行われる前に、関数を定義します。

インライン関数

インライン関数の説明

構文:

inline data_type function_name() { Body; } 

答えは いいえ; 再帰的に行うことはできません。

インライン関数の場合、コードは呼び出された位置に配置されるだけであり、再帰に必要な情報をスタック上に保持しないため、インライン関数を再帰的にすることはできません。

さらに、再帰関数の前に inline キーワードを記述した場合、inline はコンパイラによって提案としてのみ考慮されるため、コンパイラは自動的にそれを無視します。

詳細については、以下を参照してください。 インライン関数

39. 抽象クラスとは何ですか?いつ使用しますか?

抽象クラスは、基本クラスとして使用するために特別に設計されたクラスです。抽象クラスには、少なくとも 1 つの純粋仮想関数が含まれます。純粋仮想関数を宣言するには、 純粋な指定子(= 0) クラス宣言内の仮想メンバー関数の宣言内

抽象クラスをパラメータの型、関数の戻り値の型、または明示的な変換の型として使用したり、抽象クラスのオブジェクトを宣言したりすることはできません。ただし、抽象クラスへのポインターと参照を宣言するために使用できます。

抽象クラスは、コンポーネントのすべての実装間で共通の実装された機能を提供する場合に使用されます。抽象クラスではクラスを部分的に実装できますが、インターフェイスではメンバーをまったく実装できません。簡単に言うと、抽象クラスは、実装の詳細を子に提供したいが、クラスのインスタンスを直接インスタンス化したくない場合に適しています。

40. 静的データメンバーと静的メンバー関数とは何ですか?

クラスの静的データ メンバーは通常のデータ メンバーですが、先頭に static キーワードが付きます。これはプログラム内の main() の前に実行され、クラスの最初のオブジェクトが作成されるときに 0 に初期化されます。これは定義されたクラスにのみ表示されますが、その有効範囲は存続期間です。

構文:

  static Data_Type Data_Member; 

静的メンバー関数は、他の静的データ メンバーまたは他の静的メンバー関数にアクセスするために使用されるメンバー関数です。静的キーワードでも定義されます。クラス名またはクラス オブジェクトを使用して静的メンバー関数にアクセスできます。

構文:

classname::function name(parameter); 

C++ 面接の質問 - エキスパート レベル

41. キーワード Volatile の主な用途は何ですか?

その名前のように、物事は突然、予期せぬ形で変化することがあります。したがって、値がいつでも変更される可能性があることをコンパイラに通知するために使用されます。また、volatile キーワードにより、コンパイラーがコードの最適化を実行できなくなります。これは、メモリ マップド ハードウェア、シグナル ハンドラー、およびマシン コード命令とインターフェイスするときに使用することを目的としていました。

詳細については、こちらを参照してください 揮発性

42. C++ でストレージ クラスを定義し、名前を付ける

ストレージ クラスは、変数または関数の機能 (有効期間と可視性) を定義するために使用されます。これらの機能は通常、プログラムの実行中に変数の存在を追跡するのに役立ちます。

構文:

storage_class var_data_type var_name; 

いくつかの種類のストレージ クラス:

ストレージクラスの例

詳細については、以下を参照してください。 ストレージクラス

43. 可変ストレージクラス指定子とは何ですか?どのように使用できますか?

その名前と同じように、可変ストレージ クラス指定子は、メンバーが const として宣言されたオブジェクトの一部であっても、クラス データ メンバーを変更可能にするためにそのメンバーでのみ使用されます。 static メンバー、const メンバー、または参照メンバーは可変指定子を使用できません。関数を const として宣言すると、関数に渡されるこのポインタは const になります。

44. ブロック スコープ変数を定義します。

したがって、変数のスコープは、変数にアクセスできる領域です。グローバルとブロックまたはローカルの 2 つのスコープ領域があります。

ブロック スコープ変数は、ローカル スコープ変数とも呼ばれます。関数内 (main など) またはブロック内 (ループや if ブロックなど) で定義された変数はローカル変数です。これは、それが宣言されている特定の関数/ブロック内でのみ使用できます。ブロックスコープ変数は、ブロックが関数内にある場合でも、ブロックの外では使用できません。

詳細については、以下を参照してください。 変数のスコープ

45. キーワード Auto の機能は何ですか?

auto キーワードを使用すると、複雑な型の変数を簡単に宣言できます。初期化句にテンプレート、関数へのポインタ、メンバーへの参照などが含まれている場合は、auto を使用して変数を宣言できます。型推論機能を使用すると、コンパイラがすでに知っていることを書き出す時間を短縮できます。すべての型はコンパイラ段階でのみ推定されるため、コンパイル時間はわずかに増加しますが、プログラムの実行時間には影響しません。

詳細については、以下を参照してください。 C++ での自動車

46. C++ で名前空間を定義します。

名前空間を使用すると、グローバル スコープを持つ名前付きアイテムをより小さなスコープに整理し、名前空間スコープを与えることができます。これにより、プログラム部分を名前付きの個別の論理スコープに編成することができます。ネームスペースは、変数、メソッド、クラスなどの識別子を定義または宣言する場所を提供します。

あるいは、名前空間は、その中の識別子 (型、関数、変数などの名前) にスコープを与える宣言的なゾーンであると言うことができます。名前空間は、コードを論理的なカテゴリに整理し、コード ベースに多数のライブラリがある場合に発生する可能性のある名前の衝突を避けるために使用されます。

詳細については、以下を参照してください。 C++ の名前空間

47. void() 戻り値の型はいつ使用されますか?

void キーワードは、関数の戻り値の型として使用される場合、関数が値を返さないことを示します。関数のパラメーター リストとして使用される場合、 void は関数がパラメーターを取らないことを示します。値を返さない関数は、void 関数とも呼ばれます。これらは何も返すように設計されていないため、void と呼ばれます。確かにそうですが、部分的にしかありません。 void 関数から値を返すことはできませんが、何かを返すことはできます。 void 関数には戻り値の型はありませんが、値を返すことができます。

詳細については、以下を参照してください。 戻り値の型を無効にする

48. 浅いコピーと深いコピーの違いは何ですか?

浅いコピー

ディープコピー

Shallow copyでは、元のオブジェクトのコピーが保存され、最終的には参照アドレスのみがコピーされます。簡単に言うと、浅いコピーでは重複が最小限に抑えられます。 ディープ コピーでは、元のオブジェクトのコピーと反復コピーの両方が保存されます。簡単に言えば、ディープコピーはすべてを複製します
コレクションの浅いコピーは、要素ではなく、コレクション構造のコピーです。浅いコピーを使用すると、2 つのコレクションが個々の要素を共有するようになります。 コレクションのディープ コピーは、元のコレクション内のすべての要素が複製された 2 つのコレクションです。
浅いコピーのほうが速い ディープコピーは比較的遅いです。

詳細については、以下を参照してください。 浅いコピー VS 深いコピー

49. コンストラクターから仮想関数を呼び出すことはできますか?

はい、コンストラクターから仮想関数を呼び出すことができます。ただし、オーバーライドの例外がスローされる可能性があります。

50. ボイドポインタとは何ですか?

その名前のように、void ポインターは、何にも、どのデータ型にも関連付けられていないポインターです。それにもかかわらず、void ポインターは任意の型のアドレス値を保持でき、あるデータ型から別のデータ型に変換できます。

詳細については、情報を参照してください。 C++ の Void ポインター

おまけの質問:

とは ' これ ' C++ のポインタ?

これ ポインターを使用すると、すべてのオブジェクトが必須のポインターを介して独自のアドレスにアクセスできるようになります。すべてのメンバー関数は これ 暗黙の引数としてのポインタ。 これ ポインタ メンバー関数内の呼び出しオブジェクトを参照するために使用できます。

  • これ ポインタは、オブジェクトをパラメータとして別のメソッドに渡すために使用されます。
  • 各オブジェクトはデータ メンバーの独自のコピーを取得します。
  • これ ポインターはインデクサーを宣言するために使用されます。

詳細については、以下を参照してください。 これ C++のポインタ