ポインター/参照のないポリモーフィズム: 不可能
オブジェクト指向プログラミングでは、ポリモーフィズムにより、異なるクラスのオブジェクトが同じクラスに対して異なる応答を行うことができます。メソッド呼び出し。 StackOverflow の質問の中には、ポリモーフィズムにポインター/参照が不可欠な理由に触れるものもありますが、多くの場合、特定のシナリオについて掘り下げられています。この記事は、ポリモーフィズムを実現する際にポインター/参照が必要になる根本的な理由を明らかにすることを目的としています。
ポリモーフィズムを促進するメカニズムである動的バインディングには、ヒープ上のメモリ割り当てで十分であるとよく考えられています。ただし、次のコードが示すように、この仮定は正しくありません。
Derived d; Base* b = &d;
ここでは、 d はスタックに割り当てられていますが、ポリモーフィズムは基本クラス ポインター b を通じて効果的に機能します。
理解ポリモーフィズムのセマンティクスは非常に重要です。基本クラスのポインターまたは派生クラスへの参照が存在しない場合、ポリモーフィズムは無効になります。次の点を考慮してください。
Base c = Derived();
この場合、オブジェクト c は Derived としてではなく、スライスにより Base として扱われます。技術的にはポリモーフィズムが適用されますが、元の Derived オブジェクトが存在しないため役に立たなくなります。
あるいは、以下のコードはポインターの重要性を強調しています。
Base* c = new Derived();
ポインター c はメモリーを指します。 Base オブジェクトを参照するか派生オブジェクトを参照するかに関係なく、場所を指定します。ただし、c を介して仮想メソッドを呼び出すと、動的解決がトリガーされ、ポリモーフィックな動作が保証されます。
結論として、ポインター/参照はポリモーフィズムを実装する際の単なる便宜ではありません。これらは、派生クラスのアイデンティティを維持し、仮想メソッド呼び出しが適切な実装に解決されることを保証するための本質的な要件です。ポインター/参照がなければ、ポリモーフィズムはオブジェクト指向プログラミングでは不可能な概念になります。
以上がオブジェクト指向プログラミングにおけるポリモーフィズムにポインター/参照が不可欠なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。