抽象クラス

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

virtualキーワードで仮想関数を宣言し、必ず子クラスでオーバーライドしなければならない指定が可能です。
以下のように書くと、必ず子クラスでのオーバーライドが必須となります。

スポンサーリンク

class parent {
public:
    virtual void a() = 0;
    virtual void b() = 0;
};

virturalキーワードで仮想関数を宣言し、続けて「 = 0;」と0を代入する書き方で、その仮想関数は子クラスで必ず上書きが必要であるという意味を持ちます。
このような上書き必須の仮想関数を持つクラスを、抽象クラスと呼びます。

#include <iostream>
 
class parent {
public:
    virtual void a() = 0;
    virtual void b() = 0;
};
 
// parentクラスを継承
class child : public parent {
public:
    void a() { std::cout << "child.a()\n"; }
    void b() { std::cout << "child.b()\n"; }
};
 
int main() {
    child child_obj;
}

と、子クラスでオーバーライドしなければなりません。
このとき、childクラスでa(), b()が定義されていないと、childクラスのインスタンス化ができずに、コンパイルエラーとなります。

また、抽象クラス自体をインスタンス化しようとして・・・

parent parent_obj;

のように書くのもコンパイルエラーとなります。
抽象クラス自体は、インスタンス化ができません。

スポンサーリンク
 
スポンサーリンク