c++ 純粋仮想関数
[目次]
- 純粋仮想関数とは
- 使い方
- 純粋仮想関数のできること
/**************************************************************
virtual bool Initialize() = 0 { }
virtual void ProcessInput() = 0 { }
virtual void Update(float) = 0 { }
virtual void Render() = 0 { }
virtual void Finalize() = 0 { }
/**************************************************************
コード学習の時に怪しげなコードを見つけた。なんやろと思って調べたら、仮想関数の後ろに " = 0 " を付けたこれは純粋仮想関数というものらしい。英語は " pure virtual function "。
1. 純粋仮想関数とは
純粋仮想関数とは、仮想関数の一種で、実装を持たない関数のことを指す。純粋仮想関数を持つクラスは抽象クラスと呼ぶ。その抽象クラスはインスタンス化されず、持つすべての純粋仮想関数を継承し実装して初めて呼び出すことができる。でないと子クラスも抽象クラスになる。
2.使い方
使い方は簡単で、仮想関数の後ろに " = 0 " を付ければ純粋仮想関数になる。
// 宣言
class Parent {
virtual void functionA() = 0 { }
}
class Child {
void functionA() { ... }
}
// 呼び出し:
Child a;
a.functionA();
3.純粋仮想関数のできること
本文の一番最初に乗せたコードはシーンの切り替えや描画などにかかわるクラスで書かれたコードで、流れとしては初期化して、入力を検知し状態を更新して描画する。
このようにシーンは多数あるはずなので、純粋仮想関数でテンプレートみたいの物を先に用意して、後に必要な時に新たなシーンを作れば、コード上はまとまってきれいなような気がするが、そのまま仮想関数を使うのもありかもしれない。。。
つまり、純粋仮想関数は実装を持たない仮想関数で、持つクラスは抽象クラスと呼び、インスタンス化ができない。
今回は基礎的なもので純粋仮想関数と仮想関数の違いは後日研究してまたノートに乗せようと考えている。アルゴリズム的な違いではなく、内の動きみたいな感じでいいのかな。
では、今回はこれで。
参考サイト