匿名クラス型

クラスは匿名 — にできます。つまり、識別子 なしで宣言 —。 これは、次のように、クラス名を名前に置き換 typedef える場合に便利です。

typedef struct
{
    unsigned x;
    unsigned y;
} POINT;

Note

前の例で示した匿名クラスの使用は、既存の C コードとの互換性を維持するために役立ちます。 一部の C コードでは、 を匿名 typedef 構造体と組み合わせて使用する方法が一般的です。

匿名クラスは、次のように、クラス メンバーへの参照が別のクラスに含まれていないかのように見せる場合にも役立ちます。

struct PTValue
{
    POINT ptLoc;
    union
    {
        int  iValue;
        long lValue;
    };
};

PTValue ptv;

前のコードでは、 オブジェクトメンバー選択演算子 ( ) を使用 iValue して にアクセスできますiValue

int i = ptv.iValue;

匿名クラスには、特定の制限が適用されます (匿名共用体の詳細については、「共用体」 を参照してください)。 匿名クラスの制限は次のとおりです。

  • コンストラクターやデストラクターを持つことはできません。

  • 引数として関数に渡す (省略記号を使用して型チェックを解除しない限り)。

  • 関数の戻り値として返すことはできません。

匿名構造体

Microsoft 固有の仕様

Microsoft の C 拡張機能を使用すれば、名前を指定せずに、別の構造体内に構造体変数を宣言できます。 このような入れ子の構造体を "匿名構造体" といいます。 C++ では匿名構造体を使用できません。

匿名構造体のメンバーには、包含構造体のメンバーと同じようにアクセスできます。

// anonymous_structures.c
#include <stdio.h>

struct phone
{
    int  areacode;
    long number;
};

struct person
{
    char   name[30];
    char   gender;
    int    age;
    int    weight;
    struct phone;    // Anonymous structure; no name needed
} Jim;

int main()
{
    Jim.number = 1234567;
    printf_s("%d\n", Jim.number);
}
//Output: 1234567

Microsoft 固有の仕様はここまで