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