Deklaratory abstrakcyjne języka C++
Deklarator abstrakcji jest oświadczeniem, w którym identyfikator zostanie pominięty. (Aby uzyskać pokrewne informacje, zobacz Nazwy typów i Deklaratory, gdy nie abstrakcyjne deklaratory są używane w deklaracji obiektów lub funkcji, oddzielanie się identyfikatorów pozostawia tylko informacje o typie. Zatem, abstrakcyjne deklaratory mają wpływ na modyfikowanie typu podstawowego takiego jak char do określenia typów bardziej złożonych na przykład wskaźnik do tablicy char lub char. Są one zawsze używane w połączeniu z nazwą typu podstawowego i używane tylko gdy typ wskaźnika, tablicy lub odwołania jest wywoływany (w tym wskaźnik do funkcji przekazujących ten typ podstawowy). Abstrakcyjne deklaratory odpowiadające za następujące czynności są omówione w tej sekcji:
Abstrakcyjny deklarator jest deklaratorem, który nie deklaruje nazwy — identyfikator nie jest wykluczony.Na przykład:
char *
Określa typ wskaźnika typu char. Nazwa typu składa się z nazwy typu podstawowego char plus abstrakcyjnego deklaratora *.
Podobnie, abstrakcyjny deklarator dla odwołania jest operatorem & i dla typu tablicy jest określony przy użyciu nawiasów. Każdy typ może być określony poprzez stosowanie składni dla deklaratora i usuwanie identyfikatora.
char & // reference to char
char[5] // array of char
Bardziej skomplikowane jest użycie abstrakcyjnego deklaratora, który deklaruje wskaźnik typu do funkcji, która przyjmuje dwa argumenty, oba typu char *, a następnie zwraca typ char *:
char * (*)( char *, char * )
W połączeniu z specyfikatorem typu podstawowego, abstrakcyjny deklarator deklaruje typ całkowicie. Nazwy typów skonstruowane z deklaratorów abstrakcyjnych, mogą być używane wszędzie tam, gdzie typ jest wywoływany dla:
// Get the size of array of 10 pointers to type char.
size_t nSize = sizeof( char *[10] );
// cast fptr to pointer to function that takes two arguments, both of type
// pointer to char
i = (char * (*)(char*, char*)) fptr;
Specyfikator typedef może być wykorzystywany do unikania powtarzania uciążliwej składni deklaratorów abstrakcyjnych.