中原です。
前回ポリモフィズムと言っていましたが、それに先駆けて必要な知識を講座で行っていきたいと思います。
今回は仮想関数です。
第7回 C++講座 『仮想関数』
[0回]
仮想関数はある意味オーバーライドと同じです。
ただ、派生先にオーバーライドさせることを明示的に示します。
class CBaseChracter
{
protected:
int m_iX;
int m_iY;
public:
virtual void move(){}
};
class Player : public CBaseCharacter
{
public:
void move()
{
m_iX += 10;
}
};
使い方は上記のような感じです。
派生先に作って欲しい関数を、基底クラスで頭に virtual を付けて宣言します。
関数の中身は空でかまいません。
これを仮想関数といいます。
派生先では関数を再宣言し、通常と変わらずに実装します。
でも、これではオーバーライドと変わりませんよね?
ですが意味合い的に全然違うのです。
ただの
オーバーライドは、派生クラス側で関数の中身を変えたい場合に用いられます。
それと違い、
仮想関数とは、派生先で作ってもらいたい関数を、基底クラス側で宣言してしまうのです。
主導権が派生側にあるか、基底側にあるか、なのです。
仮想関数の説明は以上なのですが、これでは基底クラスを継承して派生クラスを作る人にとって、仮想関数があるかどうかなんて中々気付かないですよね。
なんと、C++言語には、
仮想関数を派生先で再宣言しなければエラーが出るようにすることも出来るのです。
class CBaseChracter
{
protected:
int m_iX;
int m_iY;
public:
vitual void move() = 0;
};
class Player : public CBaseCharacter
{
public:
void move()
{
m_iX += 10;
}
};
変わった部分をピックアップしてみます。
virtual void move() = 0;
基底クラスで宣言した仮想関数を
実装せずに、 = 0 と書きます。
こうすることによって、派生クラスでこの関数を実装しなければエラーをはくようにすることが出来ます。
いわゆる、
派生クラスで強制的に関数を実装させることが出来るのですね。
この関数のことを、
純粋仮想関数といいます。
例の通り、ベースとなるクラスで将来使うべき関数を純粋仮想関数を作っておくことによって、派生したクラスで関数を作り忘れることを防げるのです。
また、この仮想関数はポリモフィズムを扱ううえで、なくてはならないものです。
是非自分のものとしてください。
以上で今日の講座は終了です。
中原でした。
PR
COMMENT