ポリモーフィズム: ポインター/参照の必要性
オブジェクト指向プログラミングの基本概念であるポリモーフィズムにより、さまざまなクラスのオブジェクトを共通のスーパークラスに属しているかのように扱われます。動的バインディングにはヒープにメモリを割り当てるだけで十分であると直感的に思われるかもしれませんが、ポインタや参照が存在しないとポリモーフィズムが根本的に妨げられます。
理由を理解するには、次の例を考えてください。
Derived d; Base* b = &d;
このシナリオでは、d はスタック上に存在しますが、多態性は b に対して引き続き機能します。これは、 b が派生クラスのインスタンスを見つけるために必要な情報を保持しているためです。
一方、基本クラスのポインターまたは参照がなければ、ポリモーフィズムは動作できません。以下を考慮してください:
Base c = Derived();
スライスにより、c オブジェクトは Derived オブジェクトではなく Base として認識されます。ポリモーフィズムは技術的には機能しますが、派生クラス オブジェクトは本質的に失われます。
最後に、以下のコードでは:
Base* c = new Derived();
c は単にメモリの場所を指しており、Base オブジェクトまたは Derived オブジェクトが含まれる可能性があります。 。呼び出し元は特定のクラスを認識しないため、仮想メソッド呼び出しでも動的バインディングが可能です。
したがって、次のようなポリモーフィズムにはポインターまたは参照の使用が不可欠です。
以上がポリモーフィズムにポインター/参照が不可欠なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。