Использование typedef с типами классов
Использование описателя typedef с типами класса имеет широкую поддержку благодаря возможности объявлять неименованные структуры в объявлениях typedef, предоставляемой стандартом ANSI C. Например, многие программисты C используют следующий код.
// typedef_with_class_types1.cpp
// compile with: /c
typedef struct { // Declare an unnamed structure and give it the
// typedef name POINT.
unsigned x;
unsigned y;
} POINT;
Преимущество такого объявления заключает в том, что можно выполнять объявления
POINT ptOrigin;
вместо
struct point_t ptOrigin;
В C++ различие между именами typedef и реальными типами (объявленными с ключевыми словами class, struct, union и enum) более четкое. Хотя предоставляемая в С возможность объявлять безымянные структуры в операторе typedef по-прежнему работает, она не предоставляет никаких значимых преимуществ, как в C.
// typedef_with_class_types2.cpp
// compile with: /c /W1
typedef struct {
int POINT();
unsigned x;
unsigned y;
} POINT;
В предыдущем примере класс POINT объявляется с помощью синтаксиса typedef неименованного класса. POINT считается именем класса, однако к именам, предоставленным таким образом, применяются следующие ограничения.
Имя (синоним) не может находиться после префикса class, struct или union.
Имя не может использоваться в качестве имени конструктора или деструктора в объявлении класса.
Таким образом, этот синтаксис не предоставляет механизм наследования, создания или удаления.