C ++での動的バインディング:説明、関数、および実装

公開: 2021-02-04

目次

序章

この記事では、C++での動的バインディングの動作について説明します C++での継承と静的バインディングの動作に関する基本的な知識が必要です。 これは、静的バインディングのいくつかの制限が動的バインディングによって削除されるためです。 適切で単純なコードとともに、動的バインディングがどのように役立つかを示します。

動的バインディングとは何ですか?

バインドとは、通常、あるオブジェクトを別のオブジェクトにリンクすることを意味します。 プログラミング言語に関しては、バインディングはそれほど違いはありません。 これは、関数定義と関数呼び出しのリンクです。 しかし、なぜ「動的」なのですか? 簡単に言うと、動的バインディングは、実行する関数の選択または選択を実行時まで遅らせるだけです。 C ++で動的バインディングを使用して、オブジェクトの基になるタイプに基づいて実行できる関数を選択します。

この柔軟性は、静的バインディングを使用するプログラマーには提供されませんでした。 静的バインディングは、実行時ではなくコンパイル時に発生していました。 さらに、静的バインディングはコンパイル時に関数呼び出しと定義のリンクを作成しましたが、現在ご存知のように、動的バインディングは実行時までそれを行いません。

動的バインディングを使用すると、実行時に必要な関数のタイプを柔軟に選択できるため、タイプの違いを無視できます。 このステートメントを調べると、動的バインディングにより、単一の関数名を使用してさまざまなオブジェクトを処理できることがわかります。 これにより、コードの複雑さが軽減され、プログラマーはデバッグを簡単に行うことができます。

仮想関数

C++での動的バインディングについてはたくさん話しました。 しかし、それをどのように進めるのですか? C ++コードに動的バインディングを実装するには、「仮想関数」を使用する必要があります。 では、仮想関数とは何ですか?

仮想関数は別の記事にとって十分に重要であるため、この記事では仮想関数について詳しく説明しません。 ただし、動的バインディングを明確に理解するための仮想関数に関する十分な情報が提供されます。

仮想関数は、ポインター(または参照)を介して行われた呼び出しが、ポインターを持つオブジェクトのタイプに基づいて実行時に解決される特別なメンバー関数です。 簡単に言うと、基本クラスで仮想関数を定義すると、派生クラスで関数をオーバーライドできます。

これが仮想関数の力です。 C ++では、関数定義の先頭でキーワード「virtual」を使用して仮想関数を定義します。 関数が「virtual」と宣言されると、すべての派生クラスで「virtual」のままになるため、基本クラスのすべての派生クラスに対してキーワードvirtualを繰り返す必要がない場合があります。

C++の実装

それは仮想関数についてです。 次に、C++での動的バインディングを理解するためのプログラムを調べてみましょう

プログラム#1

2つのクラスがあります。-クラスAは「基本」クラスですが、クラスBは「派生クラス」です。 両方のクラスの中には、同じ名前の1つの関数'display'があります。 親クラスには、display()関数を呼び出すfinal_print()という名前の別の関数があります。 main()関数では、同じdisplay()関数を呼び出して、2つの異なるクラスに対して2つの異なるオブジェクトを作成します。

上記のプログラムの出力を見てみましょう。

プログラム#1の出力:

予想どおり、出力は、コンパイル時に定義されているように、基本クラスのdisplay()関数を2回実行します(静的バインディング)。 しかし、これは私たちが望んでいた出力ではありません。

上記のコードを動的バインディングコードに変換するには、仮想関数を使用する必要があります。 その方法を見てみましょう。

プログラム#2:

クラスAとクラスBの両方のdisplay()関数に「virtual」キーワードを追加するだけで、仮想関数になります。 必要な変更はそれだけです。 前と同じように、2つの異なるオブジェクトを使用して同じfinal_print()関数を呼び出します。 今どのような出力が得られるか見てみましょう。

プログラム#2の出力

これは私たちが望んでいた出力であり、関数の動的バインディングを使用して取得しました。

世界のトップ大学からオンラインでソフトウェアコース学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

結論

この記事では、C++での動的バインディングの概念について説明しました 要約すると、動的バインディングにより、単一の関数を呼び出してさまざまなオブジェクトを処理することにより、柔軟性が得られます。 コードから明らかなように、2つの異なるオブジェクトを作成して同じ関数display()を呼び出し、2つの異なる出力を提供しました。 これが可能なのは、コンパイル時に発生する静的バインディングとは異なり、動的バインディングが実行時に発生するためです。

フルスタック開発の詳細に興味がある場合は、upGrad&IIIT-Bのフルスタックソフトウェア開発のエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに設計されており、500時間以上の厳格なトレーニング、9以上のプロジェクト、および割り当てを提供します。 、IIIT-B卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、トップ企業との雇用支援。

C ++プログラミング言語とは何ですか?

C++は汎用プログラミング言語です。 これは、世界で最も広く使用されているプログラミング言語の1つです。 C ++はC言語の拡張バージョンであり、オブジェクト指向プログラミングを容易にする機能を提供します。 C ++は汎用プログラミング言語であり、Cは特殊目的プログラミング言語です。 C ++は、オブジェクト指向プログラミングをサポートするためにCの拡張として作成され、デスクトップアプリケーション、モバイルデバイス用のアプリケーション、組み込みおよびリアルタイムシステム、およびWebアプリケーションとサービスの開発に使用されます。 C ++は、命令型、手続き型、マルチパラダイム、コンパイル済み、汎用プログラミング言語です。 構造化プログラミング、オブジェクト指向プログラミング、およびジェネリックプログラミングをサポートします。 動的型システムと明示的なメモリ管理を備えています。

オブジェクト指向プログラミングとは何ですか?

OOPは、再利用可能で、保守が容易で、読みやすいコードを作成する方法です。 要するに、OOPは、実世界のオブジェクトを中心としたソフトウェアの設計に基づくプログラミングパラダイムです。 たとえば、Javaでは、本を扱うソフトウェアを設計する場合、Bookというクラスを作成してから、単一の本を表すこのクラスの個別のインスタンス(オブジェクト)を作成します。 同じことが、ソフトウェアで作成する必要のある他のクラスにも当てはまります。

C ++の動的バインディングとは何ですか?

動的バインディングは、プログラムテキスト内の識別子の意味を、実行時に検出されたその識別子の定義に関連付けます。 この意味の関連付けは、バインディングと呼ばれます。 これがオブジェクト指向プログラミングの基本原理です。 動的にバインドされた識別子は、オブジェクト指向のクラス階層のブランチとリーフです。 これらは、コンパイル時ではなく実行時に解決されるため、動的です。 オブジェクト指向のクラス階層のブランチとリーフは、それらから派生したクラスにバインドされているため、動的です。