よくあるC++インタビューの質問
ここでは、いくつかの重要なC++インタビューの質問が表示されます。
-
CとC++の違いは何ですか?
キー | C | C ++ |
---|---|---|
はじめに | Cは、1969年頃にAT&TBellLabsでDennisRitchieによって開発されました。 | C++は1979年にBjarneStroustrupによって開発されました。 |
言語タイプ | 前述のように、Cは手続き型プログラミングです。 | 一方、C ++は、手続き型プログラミングとオブジェクト指向プログラミングの両方のパラダイムをサポートしています。 |
OOP機能のサポート | CはOOPの概念をサポートしていないため、ポリモーフィズム、カプセル化、継承はサポートされていません。 | C ++は、オブジェクト指向プログラミング言語であるため、ポリモーフィズム、カプセル化、および継承をサポートしています。 |
データセキュリティ | Cはカプセル化をサポートしていないため、データは自由なエンティティとして動作し、外部コードで操作できます。 | 一方、C ++カプセル化の場合、データを非表示にして、データ構造と演算子が意図したとおりに使用されるようにします。 |
ドリブンタイプ | Cは一般に関数駆動型言語として知られています。 | 一方、C++はオブジェクト駆動型言語として知られています。 |
サポートされている機能 | Cは関数をサポートしておらず、演算子のオーバーロードにも名前空間機能と参照変数機能がありません。 | 一方、C ++は関数と演算子の両方のオーバーロードをサポートし、名前空間機能と参照変数機能も備えています。 |
-
ポインタと参照の違いは何ですか?
ポインタと参照の主な違いは-
-
参照は別の名前の既存の変数を参照するために使用されますが、ポインターは変数のアドレスを格納するために使用されます。
-
参照にnull値を割り当てることはできませんが、ポインターに割り当てることはできます。
-
参照変数は値渡しで参照できますが、ポインターは参照できますが、参照渡しで参照できます。
-
参照は宣言時に初期化する必要がありますが、ポインターの場合は必要ありません。
-
参照は元の変数と同じメモリアドレスを共有しますが、スタック上でいくらかのスペースを占有しますが、ポインタはスタック上で独自のメモリアドレスとサイズを持ちます
-
C ++の仮想関数とは何ですか?
C ++の仮想関数は、派生クラスオブジェクトの種類を知らなくても、基本クラスポインターのリストを作成し、任意の派生クラスのメソッドを呼び出すために使用します。仮想関数は、実行時に遅く解決されます。
基本クラスの仮想関数がかつてのメンバー関数として宣言された場合、その基本クラスから派生したすべてのクラスで仮想関数になります。したがって、仮想基本クラス関数の再定義されたバージョンを宣言するときに、派生クラスでキーワードvirtualを使用する必要はありません。
例
#include<iostream> using namespace std; class B { public: virtual void s() { cout<<" In Base \n"; } }; class D: public B { public: void s() { cout<<"In Derived \n"; } }; int main(void) { D d; // An object of class D B *b= &d; // A pointer of type B* pointing to d b->s(); // prints"D::s() called" return 0; }を出力します
出力
In Derived
C ++でのこのポインタは何ですか?
C ++のすべてのオブジェクトは、このポインターと呼ばれる重要なポインターを介して独自のアドレスにアクセスできます。 thisポインターは、すべてのメンバー関数への暗黙のパラメーターです。したがって、メンバー関数内で、これを使用して呼び出し元のオブジェクトを参照できます。
フレンドはクラスのメンバーではないため、フレンド関数にはthisポインタがありません。メンバー関数のみがこのポインターを持っています。
このポインタの概念を理解するために、次の例を試してみましょう-
例
#include <iostream> using namespace std; class Box { public: // Constructor definition Box(double l = 2.0, double b = 2.0, double h = 2.0) { cout <<"Constructor called." << endl; length = l; breadth = b; height = h; } double Volume() { return length * breadth * height; } int compare(Box box) { return this->Volume() > box.Volume(); } private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box }; int main(void) { Box Box1(3.3, 1.2, 1.5); // Declare box1 Box Box2(8.5, 6.0, 2.0); // Declare box2 if(Box1.compare(Box2)) { cout << "Box2 is smaller than Box1" <<endl; } else { cout << "Box2 is equal to or larger than Box1" <<endl; } return 0; }
出力
Constructor called. Constructor called. Box2 is equal to or larger than Box1
-
C /C++でのポインタ演算
ポインタ演算は、C言語で加算、減算、インクリメントなどの算術演算を実装するために使用されます。加算、減算、インクリメント、デクリメントなどの4つのポインタ演算があります。 32ビットマシンでは、値を2ずつインクリメントまたはデクリメントし、2*の数値を加算または減算します。 64ビットマシンでは、値を4ずつインクリメントまたはデクリメントし、4*の数値を加算または減算します。 これがC言語でのポインタ演算の例です 例 #include<stdio.h> int main() { int val = 28; int *pt; &n
-
C++でランダムポインタを使用してリストをコピーする
リンクリストは線形データ構造であり、各ノードには2つのブロックがあり、一方のブロックにはノードの値またはデータが含まれ、もう一方のブロックには次のフィールドのアドレスが含まれます。 各ノードにリスト内の他のノードを指すランダムポインタが含まれるようなリンクリストがあると仮定します。タスクは、元のリストと同じリストを作成することです。ランダムなポインタを持つ元のリストからリストをコピーすることを、リンクリストの「ディープコピー」と呼びます。 例 入力-1 出力: 5-> 2 -> 3 -> 7 ->4 -> 説明: この問題を解決するためのア