C and C++


LANG.TYPE.MI.PROTI : Multiple Inheritance with Protected Interface Class

要旨

A class inherits from multiple base classes, and one of those base classes is an interface class that is inherited with protected.

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

See also:

プロパティ

クラス名 Multiple Inheritance with Protected Interface Class
日本語クラス名 Multiple Inheritance with Protected Interface Class
クラス分類 スタイル (style)
ニーモニック LANG.TYPE.MI.PROTI
カテゴリー
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 Protected Interface Class"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

// 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;
};

// An instantiation of mix0 is considered an interface class in
// contexts where it is inherited as a "mixin" - that is, where at
// least one instantiation parameter is the interiting class.
template <class T>
class mix0 {
  public:
    void go(T){};
};

// This class is not an interface.
// - It has no methods.
// - It isn't a template, so can't be inherited as a mixin.
class noninterface {};

class derivedA : // 'Multiple Inheritance with Protected Interface Class' warning issued here
    protected interface0,
    protected mix0<derivedA>         // template parameter is the inheriting class
{
    void start(void) {};
};


class derivedB : protected interface0 {};                     // not multiple inheritance

class derivedC: public interface0, protected noninterface {}; // no protected interface

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

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