底辺大学の院生がプログラミングや機械学習を勉強するブログ

勉強していることを雑にまとめるブログ。当然、正しさの保証は一切しない。

overrideキーワードをつける

先日同僚のC#erのコード見てたら、

public override void func()
{
    // code
}

こんな風にメンバ関数の定義を書いていた。


その時は、へーC#にはoverrideキーワードなんてあるんだーと思うだけだったけど、実はC++にもあるらしい。

使い方はこんな感じ。

class Base
{
public:
	virtual void virtual_func()
	{
		// code
	}
	void func()
	{
		// code
	}
};

class Sub1 : public Base
{
public:
	void virtual_func() override    // ok
	{
		// code
	}
};

class Sub2 : public Base
{
public:
	void hoge() override    // error
	{
		// code
	}
	void func() override    // error
	{
		// code
	}
};

Sub1のように、基底クラスの仮想関数をオーバーライドしている関数にoverrideキーワードを付ける。

この時Sub2のように、Baseにない関数や、仮想関数で無い関数をオーバーライドしている関数に対してoverrideをつけると、コンパイル時にエラーを知らせてくれる。



このoverrideキーワードは必須ではなく、あってもなくてもいいというのが現状。

ただオーバーライドさせることを前提とした関数にvirtualキーワードを付け忘れた場合、意図とは異なる動作をする可能性があるけどコンパイルエラーとはならないから、バグを見逃さないためにもこれからは付けておくといいなと思った。