Использование 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.

  • Имя не может использоваться в качестве имени конструктора или деструктора в объявлении класса.

Таким образом, этот синтаксис не предоставляет механизм наследования, создания или удаления.

См. также

Ссылки

Спецификатор typedef