5

C++ での動的バインディングについて明確にする必要があります。次の点について混乱しています。

  1. Cでは、関数ポインタの配列を持ち、同じシグネチャの異なる関数を割り当て、インデックスに基づいてそれらを呼び出すことができます。これは動的バインディングですか?

  2. C++ では、基底クラス ポインターの配列を持つことができますが、派生クラス オブジェクトのアドレスをポインターの基底クラス配列に割り当てることにより、派生クラスのさまざまな関数を呼び出すことができます & 仮想関数を使用して、これは動的バインディングですか?

  3. どちらの用語が正しいですDynamic bindingLink-Time Binding?

4

5 に答える 5

6

回答

  1. いいえ。これは、動的バインディングよりも動的ディスパッチにはるかに近いものです。動的バインディングとは、名前付きメソッドが実行時にバインドされる方法を指します。ここに名前はありません。
  2. はい。メソッドが仮想の場合、これが動的バインディングの定義です。名前はコンパイル時にわかりますが、実行時のオブジェクトタイプがわからないと、呼び出されるメソッドを判別できません。
  3. ここで何を意味するのかわかりません。動的バインディングは、より慣用的な用語です。
于 2009-04-10T13:10:58.873 に答える
2

動的バインディングのこれらの使用法の両方を呼び出します。C ++では、言語がメカニズムを提供しているため、Cの場合のように自分でロールする必要はありません。

(私はかつて、すべての主要なオブジェクトが関数ポインターであるフィールドを伴って渡されるアプリで作業しましたstruct。構造体の目的は、アプリが実行時の動的バインディングを実装できるようにすることでした。つまり、割り当てられた関数を変更することでした。オブジェクトの状態に応じて、実行時のオブジェクト。この「機能」は、私が知る限り、利用されることはありませんでした。)

于 2009-04-10T13:13:50.427 に答える
1

動的バインディングは、実行時にインターフェイスをその実装にバインドします。プログラムがインターフェイス実装として呼び出すコードを自動的に決定する場合の状況です。したがって、一般的に言えば、1)と2)はどちらも動的バインディングですが、この用語は通常2)にのみ使用されます。

リンク時バインディング(別名アーリーバインディング)は、ダイナミックバインディング(別名レイトバインディング)の反対です。リンク時バインディングでは、コンパイラ/リンカは呼び出すコードを正確に認識し、そのコードの直接呼び出しを生成します。動的バインディングでは、コンパイラ/リンカはそれを認識しません-正確な実装は実行時に決定されます。

于 2009-04-10T13:11:02.117 に答える
1

C言語でコードを書いてみましたか?これに使用したコンパイラはどれですか?C言語で同じ名前の2つの関数を持つことはできません。

于 2009-04-10T13:12:18.590 に答える
1

動的バインディングの概念と実装を混同しています。動的バインディング、つまり受信オブジェクトのタイプに基づいて呼び出すメソッドの選択は、何らかの形式の動的ディスパッチ、つまり(1)を使用して実装できますが、通常、状況(2)のみを参照するように名前を定義します。

于 2009-04-10T13:16:26.253 に答える