継承キーワードInheritance Keywords

Microsoft 固有の仕様Microsoft Specific

class [__single_inheritance] class-name;
class [__multiple_inheritance] class-name;
class [__virtual_inheritance] class-name;

それぞれの文字について以下に説明します。where:

class-nameclass-name
宣言するクラスの名前。The name of the class being declared.

C++ では、クラスを定義する前にクラス メンバーへのポインターを宣言できます。C++ allows you to declare a pointer to a class member prior to the definition of the class. 例:For example:

class S;
int S::*p;

上記のコードでpクラス S. の整数メンバーへのポインターとして宣言されますただし、class Sが宣言されているだけです。 このコードで定義されていません。In the code above, p is declared to be a pointer to integer member of class S. However, class S has not yet been defined in this code; it has only been declared. コンパイラがこのようなポインターを検出した場合、そのポインターの汎化表現を作成する必要があります。When the compiler encounters such a pointer, it must make a generalized representation of the pointer. この表現のサイズは、指定した継承モデルによって異なります。The size of the representation is dependent on the inheritance model specified. コンパイラに継承モデルを指定するには 4 つの方法があります。There are four ways to specify an inheritance model to the compiler:

  • Ide のメンバーへのポインター表現In the IDE under Pointer-to-member representation

  • 使用して、コマンドラインで、 /vmgスイッチAt the command line using the /vmg switch

  • 使用して、 pointers_to_membersプラグマUsing the pointers_to_members pragma

  • 継承キーワードを使用して _ _single_inheritance_ _multiple_inheritance、および _ _virtual_inheritanceします。Using the inheritance keywords __single_inheritance, __multiple_inheritance, and __virtual_inheritance. この手法により、クラス単位で継承モデルを制御します。This technique controls the inheritance model on a per-class basis.

    注意

    常にクラスを定義した後で、そのクラスのメンバーへのポインターを宣言する場合は、これらのオプションを使用する必要がありません。If you always declare a pointer to a member of a class after defining the class, you don't need to use any of these options.

クラスを定義する前に、そのクラスのメンバーへのポインターを宣言すると、作成される実行可能ファイルのサイズと速度に影響を与えます。Declaring a pointer to a member of a class prior to the class definition affects the size and speed of the resulting executable file. クラスで使用する継承が複雑になるほど、そのクラスのメンバーへのポインターを表すために必要なバイト数が多くなります。したがって、そのポインターの解釈に必要なコードも大きくなります。The more complex the inheritance used by a class, the greater the number of bytes required to represent a pointer to a member of the class and the larger the code required to interpret the pointer. 単一継承は最も簡素で、仮想継承は最も複雑です。Single inheritance is least complex, and virtual inheritance is most complex.

上記の例を次のように変更します。If the example above is changed to:

class __single_inheritance S;
int S::*p;

この場合、コマンド ライン オプションやプラグマに関係なく、class S のメンバーへのポインターは最小サイズの表現を使用します。regardless of command-line options or pragmas, pointers to members of class S will use the smallest possible representation.

注意

メンバーへのクラス ポインター表現の同じ前方宣言は、そのクラスのメンバーへのポインターを宣言する各翻訳単位で発生する必要があり、その宣言はメンバーへのポインターを宣言する前に発生する必要があります。The same forward declaration of a class pointer-to-member representation should occur in every translation unit that declares pointers to members of that class, and the declaration should occur before the pointers to members are declared.

以前のバージョンとの互換性のため _single_inheritance_multiple_inheritance、および _virtual_inheritanceのシノニムで _ _single_inheritance_ _multiple_inheritance、および _ _virtual_inheritanceしない限り、コンパイラ オプション/Za(言語を無効にします。拡張機能)を指定します。For compatibility with previous versions, _single_inheritance, _multiple_inheritance, and _virtual_inheritance are synonyms for __single_inheritance, __multiple_inheritance, and __virtual_inheritance unless compiler option /Za (Disable language extensions) is specified.

Microsoft 固有の仕様はここまでEND Microsoft Specific

関連項目See also

キーワードKeywords