« D2 バージョン 2.0.6 公開 | メイン | C++Builder 2009のコード補完機能 »

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++プログラミングがより堅牢になりました。

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/838

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年10月14日 10:20に投稿されたエントリーのページです。

ひとつ前の投稿は「D2 バージョン 2.0.6 公開」です。

次の投稿は「C++Builder 2009のコード補完機能」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35