C++ 多態性とは? 実現方法とメリットをわかりやすく解説
C++において、多態性を実現する方法はいくつかあります。
- 仮想関数:基底クラスで仮想関数を宣言することで、派生クラスはその関数をオーバーライドして異なる振る舞いを実現できます。仮想関数を呼び出す際には、オブジェクトの実際の型に基づいて対応する関数が呼び出されます。
- 親クラスで純粋仮想関数を宣言すると、サブクラスはその関数を実装しなければならず、実装しない場合はサブクラスも抽象クラスとなります。親クラスへのポインターまたは参照を使用して純粋仮想関数を呼び出すと、オブジェクトの実際の型に応じて適切な関数が呼び出されます。
- – C++では、仮想関数テーブルを使用して動的バインディングを実現しています。仮想関数を持つクラスごとに仮想関数テーブルが作成され、その中には仮想関数のアドレスが格納されています。仮想関数を呼び出す際、コンパイラはオブジェクトの型に基づいて仮想関数テーブルを検索し、対応する関数を呼び出します。
- 仮想関数ポインタ:仮想関数を持つクラスオブジェクトごとに、仮想関数テーブルを指す仮想関数ポインタがあり、このポインタを使用して動的バインディングを実現できます。
- 抽象クラス:純粋仮想関数を含むクラスは抽象クラスと呼ばれ、オブジェクトのインスタンス化はできませんが、基底クラスとして使用し、サブクラスによって純粋仮想関数が実装されることでポリモーフィズムを実現できます。