次の方法で共有


継承キーワード

Microsoft 固有の仕様

class class-name
class __single_inheritance class-name
class __multiple_inheritance class-name
class __virtual_inheritance class-name

どこで:

class-name
宣言されているクラスの名前。

C++ では、クラスの定義の前にクラス メンバーへのポインターを宣言できます。 例えば次が挙げられます。

class S;
int S::*p;

上記のコードでは、 p はクラス S の整数メンバーへのポインターとして宣言されています。ただし、 class S はまだこのコードで定義されていません。宣言されているだけです。 コンパイラは、このようなポインターを検出すると、ポインターの一般化された表現を作成する必要があります。 表現のサイズは、指定された継承モデルによって異なります。 コンパイラに継承モデルを指定するには、次の 3 つの方法があります。

  • /vmg スイッチを使用してコマンド ラインで

  • pointers_to_members プラグマの使用

  • 継承キーワードの __single_inheritance__multiple_inheritance、および __virtual_inheritanceの使用。 この手法では、クラスごとに継承モデルを制御します。

    クラスを定義した後、クラスのメンバーへのポインターを常に宣言する場合は、これらのオプションを使用する必要はありません。

クラスが定義される前にクラス メンバーへのポインターを宣言すると、結果の実行可能ファイルのサイズと速度に悪影響を及ぼす可能性があります。 クラスで使用される継承が複雑になるほど、クラスのメンバーへのポインターを表すために必要なバイト数が多くなります。 また、ポインターを解釈するために必要なコードが大きくなります。 単一 (またはまったく) の継承は最も複雑でなく、仮想継承は最も複雑です。 クラスが定義される前に宣言するメンバーへのポインターは、常に最も大きく、最も複雑な表現を使用します。

上記の例が次に変更された場合:

class __single_inheritance S;
int S::*p;

指定したコマンド ライン オプションまたはプラグマに関係なく、 class S のメンバーへのポインターは、可能な限り最小の表現を使用します。

クラス ポインターからメンバーへの表現の同じ前方宣言は、そのクラスのメンバーへのポインターを宣言するすべての変換単位で行う必要があり、宣言はメンバーへのポインターが宣言される前に発生する必要があります。

以前のバージョンとの互換性のために、コンパイラ オプション /Za(言語拡張機能を無効にする) が指定されていない限り、_single_inheritance_multiple_inheritance、および_virtual_inheritance__single_inheritance__multiple_inheritance、および__virtual_inheritanceのシノニムです。

Microsoft 固有の仕様はここまで

こちらも参照ください

キーワード