オブジェクト指向におけるクラスのうち、インスタンス化することができない特殊なクラスのことです。
抽象クラス(あるいはそれと同等といえるもの)を定義する方法はプログラミング言語によって違いがありますが、多くの場合、クラスの定義の中で、抽象メソッドと呼ばれる、実装をもたない特殊なメソッドを宣言します。クラスやメソッドに「abstract」のようなキーワードを付加する場合もあります。抽象メソッド以外にもメソッドを宣言できる言語と、できない言語があります。
インスタンス化できるようにするためには、抽象クラスを継承したサブクラスを定義して、サブクラスの側で抽象メソッドを実装(オーバーライド)します。すべての抽象メソッドに実装が与えられると、サブクラスのほうをインスタンス化できるようになります。つまり抽象クラスは、そこから作られるすべてのサブクラスが共通してもたなければならない処理(メソッド)の要件だけを宣言したものといえます。
抽象クラスに対比して、インスタンス化できるクラスを具象クラスと呼ぶことがあります。
C++ で抽象クラスを定義するには、純粋仮想関数を含んだクラスを定義します。純粋仮想関数を宣言しているクラスはインスタンス化できません。
純粋仮想関数が抽象メソッドの役割をしており、派生クラスでオーバーライドすることでインスタンス化できるようになります。
C++ の場合、純粋仮想関数以外のメンバの宣言に特に制限はありません。そのため、抽象クラスとインターフェースの実現方法に違いがありません(純粋仮想関数以外のメンバを持たなければインターフェースであると捉えることが多い)。
抽象クラスやインターフェースについての解説が、C++編【言語解説】第29章にあります。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |