Anonyme Klassentypen

Klassen können anonym sein , d. h. sie können ohne Bezeichner deklariert werden. Dies ist nützlich, wenn Sie einen Klassennamen durch einen typedef Namen ersetzen, wie in der folgenden Abbildung dargestellt:

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

Hinweis

Die Verwendung von anonymen Klassen, die im vorherigen Beispiel gezeigt wird, ist für das Beibehalten der Kompatibilität mit existierendem C-Code nützlich. In einigen C-Code ist die Verwendung in typedef Verbindung mit anonymen Strukturen weit verbreitet.

Anonyme Klassen sind außerdem nützlich, wenn Sie möchten, dass ein Verweis auf einen Klassenmember so angezeigt wird, als befände er sich nicht in einer separaten Klasse, wie im Folgenden gezeigt:

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

PTValue ptv;

Im vorherigen Code iValue kann wie folgt über den Objektelementauswahloperator (.) zugegriffen werden:

int i = ptv.iValue;

Anonyme Klassen unterliegen bestimmten Einschränkungen. (Weitere Informationen zu anonymen Gewerkschaften finden Sie unter Unions.) Anonyme Kurse:

  • Können keinen Konstruktor oder Destruktor aufweisen.

  • Kann nicht als Argumente an Funktionen übergeben werden (es sei denn, die Typüberprüfung wird mit den Auslassungspunkten besiegt).

  • Können nicht als Rückgabewerte von Funktionen zurückgegeben werden.

Anonyme Strukturen

Microsoft-spezifisch

Eine Microsoft C-Erweiterung ermöglicht es Ihnen, eine Strukturvariable innerhalb einer anderen Struktur zu deklarieren, ohne ihr einen Namen zu geben. Diese geschachtelten Strukturen werden als anonyme Strukturen bezeichnet. In C++ sind anonyme Strukturen nicht zulässig.

Sie können auf Member einer anonymen Struktur zugreifen, als ob sie Member der enthaltenden Struktur wären.

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

Ende Microsoft-spezifisch