C and C++


LANG.TYPE.BCVNV : 仮想基底クラスと非仮想基底クラスの混在

要旨

継承階層はアクセス可能な基底クラスBからの多重継承を含んでいますが、Bからの継承には仮想(virtual)なものと非仮想なものがあります。

プロパティ

クラス名 Virtual and Non-Virtual Base Class
日本語クラス名 仮想基底クラスと非仮想基底クラスの混在
クラス分類 スタイル (style)
ニーモニック LANG.TYPE.BCVNV
カテゴリー
AUTOSARC++14 AUTOSARC++14:M10-1-1 Classes should not be derived from virtual bases.
  AUTOSARC++14:M10-1-3 An accessible base class shall not be both virtual and non-virtual in the same hierarchy.
MisraC++2008 MisraC++2008:10-1-1 Classes should not be derived from virtual bases.
  MisraC++2008:10-1-3 An accessible base class shall not be both virtual and non-virtual in the same hierarchy.
MisraC++2023 MisraC++2023:13.1.1 Classes should not be inherited virtually
  MisraC++2023:13.1.2 An accessible base class shall not be both virtual and non-virtual in the same hierarchy
JSF++ JSF++:89 A base class shall not be both virtual and non-virtual in the same hierarchy.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Virtual and Non-Virtual Base Class"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

class BaseA {};
class Int1: public virtual BaseA {};
class Int2: public BaseA {};
class DerivedX: public Int1, public Int2 {}; // 'Virtual and Non-Virtual Base Class' warning issued here:
                                             //  BaseA is both a virtual and a non-virtual base class

class BaseB {};
class Int3: public virtual BaseB {};
class Int4: public virtual BaseB {};
class DerivedY: public Int3, public Int4 {};                // ok: Int3 and Int4 are non-virtual only; BaseB is virtual only

class BaseC {};
class Int5: public BaseC {};
class Int6: public BaseC {};
class DerivedZ: public Int5, public Int6 {};                // ok: all base classes are non-virtual

もし Virtual Base Class の検出を有効化した場合、Virtual Base Class のワーニングも仮想基底クラスを持つ全てのクラス宣言箇所 (Int1, Int3, Int4)で発行されます。

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

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