Share via


匿名クラス型

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

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

Note

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

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

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

PTValue ptv;

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

int i = ptv.iValue;

匿名クラスには、特定の制限が適用されます (匿名共用体の詳細については、以下を参照してください 。Unions.)匿名クラス:

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

  • 型チェックが省略記号を使用して無効化されていない限り、関数に引数として渡すことはできません。

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

匿名構造体

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 固有の仕様はここまで