C and C++


LANG.TYPE.ONVM : Override of Non-Virtual Method

要旨

A method in a base class is not declared virtual, but it is overridden in a derived class.

プロパティ

クラス名 Override of Non-Virtual Method
日本語クラス名 Override of Non-Virtual Method
クラス分類 スタイル (style)
ニーモニック LANG.TYPE.ONVM
カテゴリー
AUTOSARC++14 AUTOSARC++14:A10-2-1 Non-virtual public or protected member functions shall not be redefined in derived classes.
MisraC++2023 MisraC++2023:6.4.2 Derived classes shall not conceal functions that are inherited from their bases
CWE CWE:1076 Insufficient Adherence to Expected Conventions
JSF++ JSF++:94 An inherited nonvirtual function shall not be redefined in a derived class.
対応言語 C++ のみ利用可能です。 C は利用できません。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Override of Non-Virtual Method"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

class Base {
  public:
    void nonv_fn_A(void);
    void nonv_fn_B(void);
    virtual void virtual_fn(void);
};

class Derived : public Base {
  public:
    void nonv_fn_A(void);      /* 'Override of Non-Virtual Method' warning issued here */
    void nonv_fn_B(int);              /* ok: does not override nonv_fn_B(void) */
    void virtual_fn(void);            /* ok: virtual_fn(void) declared  virtual in Base */
    void only_in_derived(void);       /* ok: only_in_derived() not in Base */
};

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。