問題タブ [run-time-polymorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
22 参照

c++ - さまざまな種類のポリモーフィズムに関する問題

私がこれまでに学んだことから、ポリモーフィズムには、コンパイル時と実行時の 2 種類があります。コンパイル時には、ポリモーフィングされた関数または演算子はコンパイラによって解決されますが、実行時には実行時に解決されます。コンパイル時ポリモーフィズムの例には、関数と演算子のオーバーロードが含まれ、実行時ポリモーフィズムには、関数のオーバーライドと仮想関数が含まれます。また、アーリー バインディングやレイト バインディングのようなケースもありますが、後で説明します。次のコードを検討してください。

私がこれを行う場合:

結果は明らかです。

本当の問題は、基本クラスへのポインターを使用してこれらの関数を操作するときに始まります。

出力は次のようになります。

これはアーリー バインディングによるもので、コンパイラは、関数が処理するオブジェクトの型ではなく、関数を呼び出しているオブジェクトの型をチェックします。そして、明らかにそれはコンパイル時に行われます。基本クラスの関数定義でキーワードを使用するとvirtual、処理するオブジェクトのタイプに基づいてランタイムの関数定義を保存する遅延バインディングが原因で、手間をかけずに上記を簡単に実行できます。これはランタイム ポリモーフィズムの例です。

時間がかかりすぎて申し訳ありません。私の質問は、これがランタイム ポリモーフィズムを達成できる唯一の方法ですか? また、関数のオーバーライドがランタイム ポリモーフィズムである場合、前の例 (つまり、アーリー バインディングを使用したもの) も関数のオーバーライドを行っているため、ランタイム ポリモーフィズムである必要があります。

0 投票する
5 に答える
767 参照

java - メソッドのオーバーライドは常に実行時のポリモーフィズムですか?

ランタイム ポリモーフィズムは、メソッドのオーバーライドで常に発生しますか?それとも、メソッドのオーバーライド中に、サブクラス オブジェクトをスーパー クラス変数に割り当てた後にメソッドが呼び出された場合にのみ発生しますか?