派生クラスでオーバーライドしたときにvirtualをつけると読みやすくなる

派生クラスでオーバーライドしたときにvirtualをつけると読みやすくなる。
という話が『C++ Coding Standards』にあったと思います。たぶん。

//Base.h
class Base
{
  virtual void Foo();
  …
};

//Derived.h
class Derived : public Base
{
  void Foo();
  void Bar();
  …
};

Derivedクラスのメソッド「Foo」「Bar」は、Baseクラスのメソッドをオーバーライドしているのか、
Derived.hを見ただけではわかりません。
Base.hを確認する必要があります。

時として、意図しないオーバーライドで思わぬ問題が発生することがあります。
# 特にアクセス制限の少ないrubyで。
# 明示してオーバーライドするDelphiやC#がうらやましい。

派生クラスの方にも、「virtual」をつけると多少わかりやすくなります。

//Derived.h
class Derived : public Base
{
  //Foo()は基本クラスをオーバーライドしている
  virtual void Foo();
  //Bar()は基本クラスをオーバーライドしていない
  void Bar();
  …
};

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください