オブジェクト指向プログラミング – 名前が示すように、プログラミングでオブジェクトを使用します。オブジェクト指向プログラミングは、継承、隠蔽、ポリモーフィズムなどの現実世界のエンティティをプログラミングに実装することを目的としています。 OOP の主な目的は、データとデータ上で動作する関数をバインドして、その関数以外のコードの他の部分がこのデータにアクセスできないようにすることです。
OOP の構成要素として機能する基本的な概念がいくつかあります。
- クラス
- オブジェクト
- カプセル化
- 抽象化
- ポリモーフィズム
- 継承
- 動的バインディング
- メッセージパッシング
オブジェクト指向プログラミング言語の特徴
Javaの階乗
クラス
オブジェクト指向プログラミングにつながる C++ の構成要素はクラスです。これはユーザー定義のデータ型であり、独自のデータ メンバーとメンバー関数を保持し、そのクラスのインスタンスを作成することでアクセスして使用できます。クラスはオブジェクトの設計図のようなものです。例: 車のクラスを考えてみましょう。名前やブランドが異なる多くの車が存在する可能性がありますが、すべての車に 4 つの車輪、速度制限、走行距離などがあるなど、いくつかの共通の特性があります。したがって、ここでは車がクラスであり、車輪と速度制限が示されています。 、走行距離は彼らの財産です。
- クラスは、データ メンバーとメンバー関数を持つユーザー定義のデータ型です。
- データ メンバーはデータ変数であり、メンバー関数はこれらの変数を一緒に操作するために使用される関数です。これらのデータ メンバーとメンバー関数は、クラス内のオブジェクトのプロパティと動作を定義します。
- 上記のクラス Car の例では、データ メンバーは制限速度、走行距離などになり、メンバー関数はブレーキをかけたり、速度を上げたりすることができます。
言えることは、 C++ のクラス は、いくつかの共通のプロパティと動作を共有するオブジェクトのグループを表すブループリントです。
物体
オブジェクトは、いくつかの特性と動作を持つ識別可能なエンティティです。オブジェクトはクラスのインスタンスです。クラスが定義されるとき、メモリは割り当てられませんが、クラスがインスタンス化される (つまり、オブジェクトが作成される) ときにメモリが割り当てられます。
C++ // C++ Program to show the syntax/working of Objects as a // part of Object Oriented PProgramming #include using namespace std; class person { char name[20]; int id; public: void getdetails() {} }; int main() { person p1; // p1 is a object return 0; }> オブジェクトはメモリ内のスペースを占有し、パスカル、構造体、共用体のレコードのように関連付けられたアドレスを持ちます。プログラムが実行されると、オブジェクトは相互にメッセージを送信して対話します。各オブジェクトには、データとデータを操作するためのコードが含まれています。オブジェクトは、互いのデータやコードの詳細を知らなくても対話できます。受け入れられたメッセージのタイプと、オブジェクトによって返された応答のタイプを知っていれば十分です。
C++ オブジェクトとクラスについて詳しくは、この記事を参照してください。 C++ クラスとオブジェクト
カプセル化
通常、カプセル化は、データと情報を 1 つの単位にまとめることと定義されます。オブジェクト指向プログラミングでは、カプセル化は、データとそれを操作する関数を結合することとして定義されます。カプセル化の実例を考えてみましょう。会社には、会計セクション、財務セクション、販売セクションなどのさまざまなセクションがあります。財務セクションはすべての金融取引を処理し、財務に関連するすべてのデータの記録を保持します。同様に、営業セクションは販売に関連するすべての活動を処理し、すべての販売の記録を保管します。ここで、何らかの理由で財務部門の担当者が特定の月の売上に関するすべてのデータを必要とする状況が発生する可能性があります。この場合、営業部門のデータに直接アクセスすることはできません。まず営業部門の他の役員に連絡し、特定のデータを提供するよう依頼する必要があります。これがカプセル化です。ここでは、営業セクションのデータとそれを操作できる従業員が、単一の名前の営業セクションの下にラップされています。

C++ でのカプセル化
カプセル化は次のようなことにもつながります。 データの抽象化またはデータの隠蔽 。カプセル化を使用すると、データも隠蔽されます。上の例では、販売、財務、アカウントなどのセクションのデータは、他のセクションからは隠されています。
カプセル化について詳しくは、この記事を参照してください。 C++ でのカプセル化
抽象化
データの抽象化は、C++ のオブジェクト指向プログラミングの最も本質的かつ重要な機能の 1 つです。抽象化とは、重要な情報のみを表示し、詳細を隠すことを意味します。データの抽象化とは、データに関する重要な情報のみを外部に提供し、背景の詳細や実装を隠すことを指します。車を運転する男性の実例を考えてみましょう。この男性は、アクセルを踏めば車の速度が上がる、ブレーキを踏めば車が止まるということだけは知っていますが、実際にアクセルを踏むとどのように速度が上がるのか、車の内部の仕組みや仕組みについては知りません。自動車におけるアクセル、ブレーキなどの実装。これが抽象化というものです。
- クラスを使用した抽象化 : クラスを使用して C++ で抽象化を実装できます。このクラスは、利用可能なアクセス指定子を使用してデータ メンバーとメンバー関数をグループ化するのに役立ちます。クラスは、どのデータ メンバーが外部に表示され、どのデータ メンバーが表示されないかを決定できます。
- ヘッダーファイルの抽象化 : C++ におけるもう 1 つのタイプの抽象化は、ヘッダー ファイルです。たとえば、math.h ヘッダー ファイルに存在する pow() メソッドを考えてみましょう。数値のべき乗を計算する必要があるときは、関数が実際に数値のべき乗を計算する基礎となるアルゴリズムを知らなくても、math.h ヘッダー ファイルにある関数 pow() を呼び出し、引数として数値を渡します。 。
C++ の抽象化について詳しくは、この記事を参照してください。 C++ の抽象化
ポリモーフィズム
ポリモーフィズムという言葉は、多くの形式を持つことを意味します。簡単に言うと、ポリモーフィズムは、メッセージを複数の形式で表示できる機能と定義できます。人は同時に異なる特性を持つことができます。男性は同時に父親であり、夫であり、従業員でもあります。したがって、同じ人でも状況が異なれば、行動も異なります。これをポリモーフィズムと呼びます。操作は、インスタンスごとに異なる動作を示す場合があります。動作は、操作で使用されるデータのタイプによって異なります。 C++ は演算子のオーバーロードと関数のオーバーロードをサポートしています。
- 演算子のオーバーロード : オペレーターに異なるインスタンスで異なる動作を示すプロセスは、オペレーターのオーバーロードとして知られています。
- 関数のオーバーロード : 関数のオーバーロードとは、単一の関数名を使用してさまざまな種類のタスクを実行することです。ポリモーフィズムは継承の実装に広く使用されています。
例 : いくつかの整数を加算する関数を作成する必要があるとします。整数が 2 つの場合もあれば、整数が 3 つの場合もあります。同じ名前で異なるパラメーターを持つ追加メソッドを記述することができ、該当するメソッドはパラメーターに従って呼び出されます。
JavaMVC

C++ におけるポリモーフィズム
ポリモーフィズムについて詳しくは、この記事を参照してください。 C++ におけるポリモーフィズム
継承
あるクラスが別のクラスからプロパティや特性を派生できる機能は、 継承 。継承はオブジェクト指向プログラミングの最も重要な機能の 1 つです。
- サブクラス : 他のクラスのプロパティを継承するクラスをサブクラスまたは派生クラスと呼びます。
- スーパークラス : サブクラスにプロパティが継承されるクラスをベースクラスまたはスーパークラスと呼びます。
- 再利用性 : 継承は再利用性の概念をサポートしています。つまり、新しいクラスを作成したいときに、必要なコードの一部を含むクラスがすでに存在する場合、既存のクラスから新しいクラスを派生できます。こうすることで、既存のクラスのフィールドとメソッドを再利用します。
例 : Dog、Cat、Cow は動物基本クラスの派生クラスになります。

C++ における継承
継承について詳しくは、この記事を参照してください。 C++ における継承
Javaでcsvファイルを読み取る
動的バインディング
動的バインディングでは、関数呼び出しに応答して実行されるコードは実行時に決定されます。 C++ には 仮想関数 これをサポートするために。動的バインディングは柔軟性があるため、ビルド時に関数呼び出しと定義を結び付ける静的バインディングの欠点が回避されます。
例:
C++ // C++ Program to Demonstrate the Concept of Dynamic binding // with the help of virtual function #include using namespace std; class GFG { public: void call_Function() // function that call print { print(); } void print() // the display function { cout << 'Printing the Base class Content' << endl; } }; class GFG2 : public GFG // GFG2 inherit a publicly { public: void print() // GFG2's display { cout << 'Printing the Derived class Content' << endl; } }; int main() { GFG geeksforgeeks; // Creating GFG's object geeksforgeeks.call_Function(); // Calling call_Function GFG2 geeksforgeeks2; // creating GFG2 object geeksforgeeks2.call_Function(); // calling call_Function // for GFG2 object return 0; }> 出力
Printing the Base class Content Printing the Base class Content>
見てわかるように、親クラスの print() 関数は派生クラスのオブジェクトからも呼び出されます。これを解決するために、仮想関数を使用します。
仮想関数を使用した上記の例:
C++ #include using namespace std; class GFG { public: void call_Function() // function that call print { print(); } virtual void print() // using 'virtual' for the display function { cout << 'Printing the Base class Content' << endl; } }; class GFG2 : public GFG // GFG2 inherit a publicly { public: void print() // GFG2's display { cout << 'Printing the Derived class Content' << endl; } }; int main() { GFG geeksforgeeks; // Creating GFG's object geeksforgeeks.call_Function(); // Calling call_Function GFG2 geeksforgeeks2; // creating GFG2 object geeksforgeeks2.call_Function(); // calling call_Function // for GFG2 object return 0; } //this code is contributed by Md Nizamuddin> 出力
Printing the Base class Content Printing the Derived class Content>
メッセージパッシング
オブジェクトは情報を送受信することによって相互に通信します。オブジェクトに対するメッセージは、プロシージャの実行を要求するものであるため、受信側オブジェクト内の関数を呼び出して、目的の結果を生成します。メッセージの受け渡しには、オブジェクトの名前、関数の名前、および送信する情報の指定が含まれます。
例:
C++ #include using namespace std; // Define a Car class with a method to display its speed class Car { public: void displaySpeed(int speed) { cout << 'The car is moving at ' << speed << ' km/h.' << endl; } }; int main() { // Create a Car object named myCar Car myCar; // Send a message to myCar to execute the displaySpeed method int currentSpeed = 100; myCar.displaySpeed(currentSpeed); return 0; } //this code is contributed by Md Nizamuddin>
関連記事 :
- クラスとオブジェクト
- 継承
- アクセス修飾子
- 抽象化