2017年1月23日 (月)バグを事前に防ごう
皆さん、こんにちは。本日当番のプログラマーのR.Hです。
プログラムを書いているとバグはつきものですが、これを事前に防ぐ小ネタをひとつ紹介したいと思います。
結論から先に言いますと、仮想関数オーバーライド時には override キーワードを使用しようというものです。
基底クラスに仮想関数を定義し、継承先でオーバーライドする事があると思いますが、みなさんはこのとき override キーワードを使用しているでしょうか?
おそらく以下のようなコードを書いている人が多いのではないでしょうか。
class Hoge
{
public:
virtual void Func();
}
class Foo : public Hoge
{
public:
virtual void Func();
}
基底クラス Hoge を継承した Foo クラスで、基底クラスの仮想関数 Func をオーバーライドする。
上記のコードに問題はなく、正しくコンパイルできるはずです。
では、以下のコードはどうでしょうか。
class Hoge
{
public:
virtual void Func();
}
class Foo : public Hoge
{
public:
virtual void Fumc();
}
間違い探しのようですが、クラス Foo のメンバ関数が Func ではなく Fumc になっています。
単純なスペルミスですね。
しかし、上記のコードにも問題はなく、正しくコンパイルできるはずです。
期待した動作をするかどうかはもうお察しの通りですね。
こういった単純なミスを減らすために、基底クラスの仮想関数をオーバーライドするときは override キーワードを使用することをオススメします。
override キーワードは、派生クラスの該当メンバ関数が「基底クラスの仮想関数をオーバーライドする」と表明するものであり、正しくオーバーライドにならない場合はコンパイルエラーとなります。
override キーワードを使用した場合のコードは以下のようになります。
class Hoge
{
public:
virtual void Func();
}
class Foo : public Hoge
{
public:
virtual void Fumc() override;
}
上記のコードはコンパイルエラーとなります。
なぜなら基底クラスの仮想関数に Fumc が無いからです。
また、コンパイルエラーなのでプログラム実行以前にバグに気づくことができるという利点もあります。
override キーワードは強制ではないので書かなくても問題はありませんが、バグを事前に防ぐことができるので是非書くことをオススメします。
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。
コメント