C++0x final属性

C++0xに新しく追加された機能の一つに「final属性」があります。
Javaなどの言語でおなじみの属性です。
サブクラスでの継承やオーバーライドを禁止します。

C++Builder 2009で、次のコードをコンパイルすると、エラーになります。

class TFoo
{
  virtual void f() {};
};
class TBar : public TFoo
{
  //仮想メンバ関数宣言のオーバーライドを禁止する
  void f [[final]] () {};
};
class TBaz : public TBar
{
  void f() {};
};

エラーメッセージ

[BCC32 エラー] Unit1.h(24): E2542 'f' は 'final' にマークされ、上書きできない

クラスに対しても、final属性を追加できます。

class TFoo
{
  virtual void f() {};
};
//クラスの継承を禁止する
class TBar [[final]] : public TFoo
{
  void f() {};
};
class TBaz : public TBar
{
  void f() {};
};

エラーメッセージ

[BCC32 エラー] Unit1.h(22): E2542 'TBar' は 'final' にマークされ、上書きできない

[[final]]というのがちょっと読みにくく感じますが、
これでC++プログラミングがより堅牢になりました。

コメントを残す

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

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