C and C++


LANG.TYPE.MI.TMPBC : Multiple Inheritance with Too Many Protected Base Classes

要旨

A class inherits two or more non-interface classes as protected.

A class C is considered an interface class if either of the following is true.

See also:

プロパティ

クラス名 Multiple Inheritance with Too Many Protected Base Classes
日本語クラス名 Multiple Inheritance with Too Many Protected Base Classes
クラス分類 スタイル (style)
ニーモニック LANG.TYPE.MI.TMPBC
カテゴリー
AUTOSARC++14 AUTOSARC++14:A10-1-1 Class shall not be derived from more than one base class which is not an interface class.
CWE CWE:1055 Multiple Inheritance from Concrete Classes
JSF++ JSF++:88 Multiple inheritance shall only be allowed in the following restricted form: n interfaces plus m private implementations, plus at most one protected implementation.
対応言語 C++ のみ利用可能です。 C は利用できません。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Multiple Inheritance with Too Many Protected Base Classes"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

class base0 {};

class base1 {};

// interface0 is always considered an interface class:
// - It has at least one method.
// - All methods are pure virtual.
// - It has no more than one scalar data member.
class interface0 {
  public:
    char *id;
    virtual void start(void) = 0;
};

class derivedA :     // 'Multiple Inheritance with Too Many Protected Base Classes' warning issued here
  protected base0,
  protected base1
{};

class derivedB:                                 // only one base class inherited as protected
  protected base0,
  private base1
{};

class derivedC:                                 // only one non-interface inherited
                                                // ('Multiple Inheritance with Protected Interface Class'
                                                //  warning issued here if enabled)
  protected base0,
  protected interface0
{
  void start(void) {};
};

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

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