final 指定子

final キーワードを使用して、派生クラスでオーバーライドできない仮想関数を指定できます。 また、このキーワードは、継承できないクラスの指定にも使用できます。

構文

function-declaration final;
class class-name final base-classes

解説

final は状況依存のキーワードで、関数の宣言またはクラス名の後で使用した場合にのみ特別な意味を持ちますが、それ以外の場合は予約済みのキーワードではありません。

final をクラス宣言内で使用した場合、その宣言の base-classes の部分は省略可能になります。

次の例では、final キーワードを使用して、仮想関数をオーバーライドできないことを指定しています。

class BaseClass
{
    virtual void func() final;
};

class DerivedClass: public BaseClass
{
    virtual void func(); // compiler error: attempting to
                         // override a final function
};

メンバー関数をオーバーライドできることを指定する方法については、「override 指定子」を参照してください。

次の例では、final キーワードを使用して、クラスが継承できないことを指定しています。

class BaseClass final
{
};

class DerivedClass: public BaseClass // compiler error: BaseClass is
                                     // marked as non-inheritable
{
};

関連項目

キーワード
override 指定子